【问题标题】:How to change the color of the color button when pressed in Android?在Android中按下时如何更改颜色按钮的颜色?
【发布时间】:2013-01-02 05:07:25
【问题描述】:

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

【问题讨论】:

    标签: android android-button


    【解决方案1】:

    这是通过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>
    

    【讨论】:

      【解决方案2】:

      正如 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));
      

      希望对你有帮助

      【讨论】:

      • 更彻底的答案!
      【解决方案3】:

      试试这个方法:

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

      【讨论】:

        猜你喜欢
        • 2019-10-13
        • 1970-01-01
        • 1970-01-01
        • 2020-11-07
        • 2013-07-16
        • 1970-01-01
        • 2012-07-05
        • 2017-06-11
        • 2021-02-23
        相关资源
        最近更新 更多