«Как передать параметр в прорисовку» или «Создать кнопку с градиентом и изменяемым изображением» - PullRequest
4 голосов
/ 13 сентября 2011

У меня есть пользовательский объект в моем проекте Android, который должен быть фоном кнопки. Но каждая кнопка также должна поддерживать значок и текст.

То, что я до сих пор пробовал, это следующее:

У меня есть чертеж, который называется "btn_background.xml"

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
   <layer-list >
       <item>
           <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle">
                <gradient android:startColor="#ff0000" 
                    android:endColor="#ee1111" 
                    android:type="linear"
                    android:angle="90"/>
                <stroke android:color="#ff0000" 
                   android:width="1dip"/>
                <size android:width="80dip"
                      android:height="40dip" />
           </shape>
       </item>
       <item android:drawable="@drawable/btn_search"/>
   </layer-list>
</item>

И в моем файле макета я использую это так:

<Button android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:text="Button" 
        android:background="@drawable/btn_background"
        android:textColor="#ffffff"/>

Это сближает меня ... но есть две проблемы: * Изображение растянуто на всю кнопку * Я не могу просто изменить изображение в файле макета ... поэтому мне нужно было бы создать отдельный файл btn_whwhat.xml для каждой иконки?!?

Другое решение, которое я попробовал, состояло в том, чтобы использовать ImageButton вместо Button и установить в качестве фона мой btn_background.xml .... это позволило бы мне выбрать изображение в файле макета ... но затем я не могу дать ему текст ....

Буду рад услышать о ваших решениях моей проблемы:)

Большое спасибо!

1 Ответ

1 голос
/ 13 сентября 2011

Попробуйте использовать атрибут android:drawableLeft (или аналогичный Top, Right, Bottom).

...