【发布时间】:2013-01-02 05:07:25
【问题描述】:
我有一些按钮,我将其背景颜色分别设置为红色、绿色和蓝色。当我按下按钮时,会生成单击事件,但 gui 中没有任何变化让用户知道按下了按钮。 Android 按钮的默认背景灰色变为橙色,释放按下状态后恢复为灰色。如何在彩色按钮上实现这一点?
【问题讨论】:
我有一些按钮,我将其背景颜色分别设置为红色、绿色和蓝色。当我按下按钮时,会生成单击事件,但 gui 中没有任何变化让用户知道按下了按钮。 Android 按钮的默认背景灰色变为橙色,释放按下状态后恢复为灰色。如何在彩色按钮上实现这一点?
【问题讨论】:
这是通过StateListDrawable 实现的,由XML 中的selector 表示。参考:http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
这是 drawable 的示例,默认为白色,按下时为黑色:
<?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>
【讨论】:
正如 K-Ballo 所提到的,您可以使用 StateListDrawable 来实现一个具有各种不同图形的视图,具体取决于状态。在您的情况下,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));
希望对你有帮助
【讨论】:
试试这个方法:
<?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>
【讨论】: