2013-01-02 159 views
8

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

回答

26

这是通过StateListDrawable实现的,selector代表XML。参考: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> 
+0

非常感谢它完美的工作 – amy

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

正如K-Ballo所提到的,您可以使用StateListDrawable来根据状态实现具有各种不同图形的视图。在你的情况下,按钮是两个状态是按下按钮而没有按下按钮的视图。

我们需要在绘制文件夹中创建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_pressed状态

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> 

创建两个单独的XML文件.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)); 

希望它可以帮助

+0

更彻底的答案! – Diesel