2012-06-13 13 views
2

Я хотел бы использовать пользовательский цвет фона для нескольких кнопок. Я попробовал android:background="#cc2", но он заменяет всю кнопку, поэтому она больше не похожа на кнопку.Как установить цвет фона Android?

Очевидно, что для этого можно использовать <selector> (возможно). Это единственный способ? Где я могу получить шаблон для оригинальной стандартной кнопки Android?

Примечание: принятый ответ this question не то, что я хочу, так как он не похож на стандартную кнопку Android.

+0

Есть способы примените цветной фильтр к кнопке, например, тот, который указан вами по почте: 'button.getBackground(). setColorFilter (новый LightingColorFilter (0xFFFFFFFF, 0xFFAA0000));'. Возможно, это то, что вам нужно, так как кнопка остается «стандартной кнопкой Android»? –

ответ

3

Основано на this question Я смог определить, что стандартный шаблон кнопки, например. Android 2.2 находится на

C:\Program Files (x86)\Android-sdk\platforms\android-8\data\res\drawable\btn_default.xml 

Очевидно, что путь может отличаться на вашем компьютере. Он относится к чертежам, таким как "@drawable/btn_default_normal", которые относятся к файлам с 9 исправлениями, например. те ИПЧР являются

data\res\drawable-hdpi\btn_default_normal.9.png 
data\res\drawable-hdpi\btn_default_normal_disable.9.png 
data\res\drawable-hdpi\btn_default_pressed.9.png 
data\res\drawable-hdpi\btn_default_selected.9.png 
data\res\drawable-hdpi\btn_default_normal_disable_focused.9.png 

Как найти ресурсы: Я начал с конструктором Button.java (в использовании SDK менеджер для загрузки Источников для Android SDK):

this(context, attrs, com.android.internal.R.attr.buttonStyle); 

Что относится к <item> в res/values/themes.xml:

<item name="buttonStyle">@android:style/Widget.Button</item> 

Что относится к <style> в res/values/styles.xml:

<style name="Widget.Button"> 
    <item name="android:background">@android:drawable/btn_default</item> 
    <item name="android:focusable">true</item> 
    <item name="android:clickable">true</item> 
    <item name="android:textAppearance">?android:attr/textAppearanceSmallInverse</item> 
    <item name="android:textColor">@android:color/primary_text_light</item> 
    <item name="android:gravity">center_vertical|center_horizontal</item> 
</style> 

Которая, наконец, относится к res/drawable/btn_default.xml.

1

Если вы изменили фон кнопки, весь фон изменился, как вы заметили. Если вы хотите иметь кнопку в своем собственном стиле или цвете, вы можете создать файл с 9 патчами с графикой по вашему выбору в качестве фона кнопки. Если вы хотите, чтобы он показывал состояния выбора или щелчка, вы можете использовать список состояний с селектором.

Оба 9patch и селекторы объясняются здесь: http://developer.android.com/guide/topics/resources/drawable-resource.html

0

Где взять шаблон для оригинальной, стандартной кнопки Android?

Системные ресурсы включены в SDK.

вы можете найти их (на окнах) по адресу: sdk-root/platforms/[pick a platform]/data/res/drawable/

в зависимости от платформы уровня вы ищете, вы можете обнаружить, что XML-селекторов, которые вам нужны в простом Drawable, и PNG и сами находятся в одном из специальные папки с разрешениями, например drawable-mdpi или drawable-hdpi

+0

Спасибо, но до сих пор я не смог определить фактическое вытягивание, будь то селектор или 9-патч или и то, и другое. – Qwertie

2

Добавьте свой стиль

<style name="MyButtonStyle" parent="android:Widget.Button"> 
     <item name="android:background">@drawable/btn_default</item> 
</style> 

и ваш селектор (здесь btn_default.XML)

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_window_focused="false" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_window_focused="false" android:state_enabled="false" 
     android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/btn_default_pressed" /> 
    <item android:state_focused="true" android:state_enabled="true" 
     android:drawable="@drawable/btn_default_pressed" /> 
    <item android:state_enabled="true" 
     android:drawable="@drawable/btn_default_normal" /> 
    <item android:state_focused="true" 
     android:drawable="@drawable/btn_default_pressed" /> 
    <item 
     android:drawable="@drawable/btn_default_normal" /> 
    </selector> 

и ваши фотографии (9 патча) btn_default_normal и btn_default_pressed (имена могут отличаться от них) Затем примените стиль к кнопке в XML:

<Button 
     ... 
     style="@style/MyButtonStyle" 
    />   
+0

Где btn_default_normal или btn_default_pressed?! Должен ли я создать новый xml и вызвать btn_default_pressed? –

+0

Это 9-кратное изображение, помещенное в папку drawable-nodpi. – Yar

Смежные вопросы