【问题标题】:Button scales to background image instead of content按钮缩放到背景图像而不是内容
【发布时间】:2011-07-27 20:50:43
【问题描述】:

我需要做的是让背景图像刚好填满按钮的自然大小,就像没有指定背景并显示默认的灰色背景图像一样。但相反,我的按钮会放大到背景图像而不是文本的大小。

以前有一个question,但没有人有解决方案。

按钮:

<Button
    android:id="@+id/morebtn"
    style="@style/CustomButton"
    android:text="More" />

我有这个自定义按钮样式(灰色按钮是 9 个补丁):

<resources>
    <style name="CustomButton" parent="@android:style/TextAppearance">
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:layout_marginLeft">10dip</item>
        <item name="android:layout_marginRight">10dip</item>
        <item name="android:layout_marginBottom">10dip</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_centerInParent">true</item>
        <item name="android:background">@drawable/greybutton</item>
        <item name="android:textSize">20sp</item>
    </style>
</resources>

尽管被告知要 wrap_content,但现在它会横向填满屏幕。当我从 Button 样式中删除 android:background 时,按钮会缩小以按预期包裹文本。

有人知道为什么我的背景图片不像默认按钮背景吗?

【问题讨论】:

  • 将其发布为您问题的答案,以便您在两天内接受。

标签: android android-layout android-button


【解决方案1】:

你为什么不用 ImageButton 来代替:

<ImageButton android:src="@drawable/greybutton"
            android:scaleType="fitCenter" android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

然后您可以使用 scaleType 属性调整缩放比例。 唯一的缺点是你不能设置任何文本。

【讨论】:

  • 正是我无法设置文本。我不想为我的所有按钮制作单独的图像。
  • 那么您可能需要创建自己的小部件来保存图像和文本。
【解决方案2】:

该死的。我有一个尚未转换为 9patch 的 hdpi drawable,并且由于某种原因,即使在我的 mdpi 屏幕上,它也被应用而不是 mdpi drawables 文件夹中的那个。毕竟,背景缩放实际上确实按预期工作。对不起!

(因此,如果您在浏览此问题时遇到类似问题,请检查您的 drawables 文件夹以确保您正在绘制您认为的内容。另外:可能希望确保您的九个补丁中的内容边界是大小合适。请注意,它们与可拉伸边界不同。)

【讨论】:

  • 我的意思是:正确设置,九个补丁的背景图像将缩放以适应按钮的内容。
【解决方案3】:

您可以尝试使用 dip 对按钮的高度和宽度进行硬编码。如果您需要更改按钮上的文本,这将是一个问题,但它应该可以限制按钮扩展到图像的大小。当然大图会让按钮变大..宽/高是wrap_content,图片明显是内容的一部分...试试硬编码宽/高参数吧。

【讨论】:

  • 图片不比文字宽,当然也不够大到自己跨越屏幕。它显然被放大了,但我不明白为什么它在屏幕上被拉伸,而不是足够远来显示 Button 的文本。
  • 尝试将 layout_centerinparent 替换为 android:scaleType="fitCenter"
【解决方案4】:

将这两项添加到您的 CustomButton 样式中

<item name="android:minWidth">0dp</item> 
<item name="android:minHeight">0dp</item>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2011-12-29
    • 2012-09-24
    • 2012-06-27
    • 2014-04-09
    • 2019-05-17
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多