2012-06-13 91 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