Кнопка масштабируется до фонового изображения вместо содержимого - PullRequest
5 голосов
/ 28 июля 2011

Что мне нужно сделать, так это чтобы фоновое изображение просто заполнило естественный размер кнопки, например, когда фон не указан и отображается серое фоновое изображение по умолчанию. Но вместо этого моя кнопка масштабируется до размера фонового изображения, а не текста.

Был предыдущий вопрос , но ни у кого не было решения.

Кнопка:

enter image description here

<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. Когда я удаляю android: background из стиля Button, кнопка сжимается, чтобы обернуть текст, как и ожидалось.

Кто-нибудь видит, почему мое фоновое изображение не работает как фон кнопки по умолчанию?

Ответы [ 4 ]

5 голосов
/ 28 июля 2011

Почему бы вам не использовать ImageButton вместо:

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

, тогда вы можете настроить масштабирование с помощью атрибута scaleType .Единственным недостатком является то, что вы не можете установить текст.

2 голосов
/ 28 июля 2011

Проклятье. У меня был hdpi drawable, который не был конвертирован в 9patch, и по какой-то причине он применялся вместо того, который использовался в папке mdpi drawables даже на моем экране mdpi. В конце концов, фоновое масштабирование работает, как и ожидалось. Извините!

(Так что, если вы просматриваете этот вопрос с похожей проблемой, проверьте папку drawables, чтобы убедиться, что вы рисуете то, что вы думаете. Также: возможно, вы захотите убедиться, что границы содержимого в вашем девятом патче соответствующего размера. Обратите внимание, что они не совпадают с растяжимыми границами.)

1 голос
/ 20 мая 2014

Добавьте эти два элемента в ваш стиль CustomButton

<item name="android:minWidth">0dp</item> 
<item name="android:minHeight">0dp</item>
1 голос
/ 28 июля 2011

Вы можете попробовать тщательно кодировать высоту и ширину кнопок, используя dip. Это будет проблемой, если вам нужно, чтобы текст на кнопках изменился, но он должен работать, чтобы удержать кнопку от увеличения до размера изображения. Конечно, большое изображение увеличит размер кнопки ... ширина / высота равна wrap_content, а изображение явно является частью содержимого ... попробуйте жестко задать параметры ширины / высоты.

...