我想为一些按钮使用自定义背景颜色。我试过android:background="#cc2"
,但它取代了整个按钮,所以它不再像一个按钮。如何设置Android按钮的背景颜色?
很明显,人们可以使用<selector>
(可绘制)。这是唯一的方法吗?我在哪里可以获得原始的标准Android按钮的模板?
注意:this question的接受答案不是我想要的,因为它看起来不像标准的Android按钮。
我想为一些按钮使用自定义背景颜色。我试过android:background="#cc2"
,但它取代了整个按钮,所以它不再像一个按钮。如何设置Android按钮的背景颜色?
很明显,人们可以使用<selector>
(可绘制)。这是唯一的方法吗?我在哪里可以获得原始的标准Android按钮的模板?
注意:this question的接受答案不是我想要的,因为它看起来不像标准的Android按钮。
基于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
。
如果您更改了按钮背景,则整个背景会发生变化,正如您注意到的那样。如果您想使用自己的样式或颜色来创建按钮,则可以创建一个包含您选择的图形作为按钮背景的9补丁文件。如果您希望它显示选择或单击状态,则可以使用带选择器的状态列表。
两个9patch和选择进行了说明:http://developer.android.com/guide/topics/resources/drawable-resource.html
哪里获得原始,标准的Android按钮模板?
系统资源包含在SDK中。
你可以找到他们(在Windows上):sdk-root/platforms/[pick a platform]/data/res/drawable/
取决于哪个平台级别你正在寻找你会发现你所需要的XML选择在平原绘制和PNG的本身是在一个分辨率特定的文件夹例如drawable-mdpi或drawable-hdpi
谢谢,但迄今为止,我还无法确定实际的drawable,无论是选择器还是9补丁或两者。 – Qwertie
添加您的风格
<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"
/>
btn_default_normal或btn_default_pressed在哪里?我应该创建新的xml并调用btn_default_pressed? –
他们是9patch图像放在drawable-nodpi文件夹中。 – Yar
有办法应用一个颜色过滤器到按钮,就像你提到的那个贴:'button.getBackground()。setColorFilter(new LightingColorFilter(0xFFFFFFFF,0xFFAA0000));'。也许这是你需要的,因为按钮仍然是“标准Android按钮”? –