8

我有一些按钮,我将其背景颜色分别设置为红色、绿色和蓝色。当我按下按钮时,会生成单击事件,但 gui 中没有任何变化让用户知道按下了按钮。Android 按钮的默认背景灰色变为橙色,并在释放按下状态后恢复为灰色。如何在彩色按钮上实现这一点?

4

3 回答 3

26

这是通过 a 实现的StateListDrawable,用selectorXML表示。参考:http: //developer.android.com/guide/topics/resources/drawable-resource.html#StateList

这是一个可绘制的示例,默认情况下为白色,按下时为黑色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@android:color/black" /> <!-- pressed -->
    <item android:drawable="@android:color/white" /> <!-- default -->
</selector>
于 2013-01-02T05:09:37.973 回答
8

正如 K-Ballo 所提到的,您可以使用 StateListDrawable 根据状态实现具有各种不同图形的视图。在您的情况下, Button 是两种状态是 Button 按下和 button 未按下的视图。

我们需要在drawable文件夹中创建一个buttonselector.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/button_not_pressed" android:state_pressed="false" android:state_selected="false"/>
    <item android:drawable="@drawable/button_pressed" android:state_pressed="true"/>

</selector>

为按钮的状态创建两个单独的 xml 文件

button_not_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
      android:startColor="#FFFFFF"
      android:centerColor="#FFFFFF"
      android:endColor="#FFFFFF"
      android:angle="270" />
</shape>

button_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
  <gradient
      android:startColor="#FF0000"
      android:centerColor="#FF0000"
      android:endColor="#FF0000"
      android:angle="270" />
</shape>

您会注意到两个 html 颜色代码 #FF0000 和 #FFFFFF 根据状态表示按钮的背景颜色。

在您设置自定义按钮样式的 main.xml 中

<Button
        android:id="@+id/customButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/buttonselector"
        android:text="test"
        android:textColor="#000000" />

在您的活动类中添加以下两行

Button customButton = (Button) findViewById(R.id.customButton);
customButton.setBackground(getResources().getDrawable(R.drawable.buttonselector));

希望能帮助到你

于 2013-01-02T06:45:19.390 回答
2

试试这种方式:

<?xml version="1.0" encoding="utf-8"?>   
<selector xmlns:android="http://schemas.android.com/apk/res/android" >   
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#1E669B" />
            <stroke
                android:width="2dp"
                android:color="#1B5E91" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />            
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#1E669B"
                android:endColor="#1E669B"
                android:angle="270" />
            <stroke
                android:width="4dp"
                android:color="#1B5E91" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
于 2013-01-02T05:24:05.273 回答