在Android中按下时如何更改颜色button的颜色?

我有一些button,我把它的背景颜色分别设置为红色,绿色和蓝色。 当我按下button,单击事件生成,但没有gui的变化,用户知道button被按下。 Androidbutton的默认背景灰色将变为橙色,并在释放按下的状态后恢复为浅灰色。 如何实现这个彩色button?

Solutions Collecting From Web of "在Android中按下时如何更改颜色button的颜色?"

这是通过一个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来实现一个视图,这个视图具有各种不同的graphics,取决于状态。 在你的情况下,button是两个状态是按下button和button没有按下的视图。

我们需要在drawable文件夹中创build一个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> 

为button的状态创build两个单独的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,它们代表button的背景颜色。

在你main.xml中设置你的自定义button的样式

 <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>