我想为几个按钮使用自定义背景颜色。我试过android:background="#cc2"
了,但它取代了整个按钮,所以它看起来不再像一个按钮了。
显然,可以为此使用<selector>
(可绘制的)。这是唯一的方法吗?我在哪里可以获得原始标准 Android 按钮的模板?
注意:这个问题的公认答案不是我想要的,因为它看起来不像标准的 Android 按钮。
基于这个问题,我能够确定例如 Android 2.2 的标准按钮模板位于
C:\Program Files (x86)\Android-sdk\platforms\android-8\data\res\drawable\btn_default.xml
显然,您的 PC 上的路径可能不同。它指的是drawable,例如"@drawable/btn_default_normal"
指的是9-patch文件,例如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 的 Sources):
this(context, attrs, com.android.internal.R.attr.buttonStyle);
其中指的是<item>
in res/values/themes.xml
:
<item name="buttonStyle">@android:style/Widget.Button</item>
其中指的是<style>
in 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
。
添加你的风格
<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"
/>
如您所见,如果您更改按钮背景,则整个背景都会更改。如果您想拥有自己风格或颜色的按钮,您可以创建一个 9-patch 文件,将您选择的图形作为按钮背景。如果您希望它显示选择或单击状态,您可以使用带有选择器的状态列表。
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