2012-06-13 48 views
2

我想爲一些按鈕使用自定義背景顏色。我試過android:background="#cc2",但它取代了整個按鈕,所以它不再像一個按鈕。如何設置Android按鈕的背景顏色?

很明顯,人們可以使用<selector>(可繪製)。這是唯一的方法嗎?我在哪裏可以獲得原始的標準Android按鈕的模板?

注意:this question的接受答案不是我想要的,因爲它看起來不像標準的Android按鈕。

+0

有辦法應用一個顏色過濾器到按鈕,就像你提到的那個貼:'button.getBackground()。setColorFilter(new 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 

顯然,您的PC上的路徑可能不同。它涉及諸如"@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 Manager下載源的Android SDK):

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

這是指在<item>res/values/themes.xml

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

這是指在res/values/styles.xml<style>

<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中。

你可以找到他們(在Windows上):sdk-root/platforms/[pick a platform]/data/res/drawable/

取決於哪個平臺級別你正在尋找你會發現你所需要的XML選擇在平原繪製和PNG的本身是在一個分辨率特定的文件夾例如drawable-mdpi或drawable-hdpi

+0

謝謝,但迄今爲止,我還無法確定實際的drawable,無論是選擇器還是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

他們是9patch圖像放在drawable-nodpi文件夾中。 – Yar