如何设置Android按钮背景颜色?

时间:2012-06-13 21:09:07

标签: android button

我想为几个按钮使用自定义背景颜色。我尝试了android:background="#cc2",但它取代了整个按钮,因此它看起来不像是一个按钮了。

显然,人们可以使用<selector>(drawable)。这是唯一的方法吗?我在哪里可以获得原始标准Android按钮的模板?

注意:this question的接受答案不是我想要的,因为它看起来不像标准的Android按钮。

4 个答案:

答案 0 :(得分: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个补丁文件,例如HDPI的是

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>

其中涉及<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 :(得分: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"
   />        

答案 2 :(得分:1)

如果您更改按钮背景,则会更改整个背景,如您所见。如果您想拥有自己风格或颜色的按钮,可以创建一个9补丁文件,其中包含您选择的图形作为按钮背景。如果您希望它显示选择或单击状态,您可以使用带选择器的状态列表。

这里解释了9patch和选择器:http://developer.android.com/guide/topics/resources/drawable-resource.html

答案 3 :(得分:0)

  

我在哪里可以获得原始标准Android按钮的模板?

系统资源包含在SDK中。

您可以在sdk-root/platforms/[pick a platform]/data/res/drawable/

找到它们(在Windows上)

根据您要查找的平台级别,您可能会发现您需要的xml选择器是普通的可绘制的,并且png本身位于一个特定于分辨率的文件夹中,例如drawable-mdpi或drawable-hdpi