2

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

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

注意:这个问题的公认答案不是我想要的,因为它看起来不像标准的 Android 按钮。

4

4 回答 4

3

基于这个问题,我能够确定例如 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

于 2012-06-13T22:37:23.733 回答
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"
   />        
于 2013-02-14T10:24:00.310 回答
1

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

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

于 2012-06-13T21:15:13.517 回答
0

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

系统资源包含在 SDK 中。

您可以在以下位置找到它们(在 Windows 上):sdk-root/platforms/[pick a platform]/data/res/drawable/

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

于 2012-06-13T21:25:13.313 回答