【问题标题】:change button text color when pressed按下时更改按钮文本颜色
【发布时间】:2012-02-17 20:56:44
【问题描述】:

我已将按钮设为透明,因此我希望在按下按钮时更改按钮文本颜色。是否可以仅使用 xml 文件来执行此操作?

【问题讨论】:

    标签: android android-button


    【解决方案1】:

    是的,你可以这样做:

    布局/main_layout.xml:

    .....
        <Button
          android:id="@+id/button"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="bonjour !"
          android:textColor="@color/button_text_color"
        />
    .....
    

    颜色/button_text_color.xml:

       <selector xmlns:android="http://schemas.android.com/apk/res/android">
         <item android:color="#c0c0c0" android:state_pressed="true"/>
         <item android:color="#ffffff"/>
       </selector>
    

    【讨论】:

    • 您究竟在哪里更改文本颜色?你在玩背景,而不是文字颜色
    • 不是@drawable/button_text_color,而是@color/button_text_color
    【解决方案2】:

    请参阅本文档中名为 State List 的部分...Drawable Resources

    您可以定义两个不同的Button xml 文件,一个用于透明的“默认”状态,另一个将按钮设置为红色用于“按下”状态。然后你定义一个selector 来切换不同状态的可绘制资源。

    编辑:根据 devunwired 的评论,颜色状态列表资源可能更适合仅更改颜色而不是可绘制对象本身。

    【讨论】:

    • +1 因为这个答案大部分是正确的。不过,我想补充一点,您可以使用颜色状态列表以与可绘制背景类似的方式更改 android:textColor 属性:developer.android.com/guide/topics/resources/…
    • 噢!是的,一点没错。我也应该包含一个链接——我只是碰巧把另一个链接加了书签,所以它就在手边。
    【解决方案3】:

    我喜欢 Konstantin Burov 在另一期提出的解决方案:Android customized button; changing text color

    您实际上可以管理更多的状态,而不仅仅是按下和正常。但它应该可以解决问题。

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#ffffff" />
    
    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:color="#000000" />
    
    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:color="#000000" />
    
    <!-- Default color -->
    <item android:color="#ffffff" />
    </selector>
    

    然后您可以在按钮中使用可绘制的选择器来更改文本颜色属性,如下所示。请注意,下面示例中的选择器名为“button_text_color”

    android:textColor="@drawable/button_text_color"

    使用相同的可绘制方法,您还可以解决按钮的背景颜色。请记住,在选择器中,您需要使用“android:drawable”属性,而不是使用“android:color”属性,如下所示。

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:drawable="#ffffff" />
    
    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:drawable="#000000" />
    
    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:drawable="#000000" />
    
    <!-- Default color -->
    <item android:drawable="#ffffff" />
    </selector>
    

    然后在按钮本身做,注意这次选择器名称是“button_background”

    android:background="@drawable/button_background"

    【讨论】:

      【解决方案4】:

      您必须在代码中执行此操作。试试这个:

          mBtn = ((Button) findViewById( R.id.button1 ));
          mBtn.setOnClickListener( new OnClickListener() {
      
              @Override
              public void onClick(View v) {
                  mBtn.setTextColor( Color.RED );
              }
          });
      

      声明:

      private Button mBtn;
      

      【讨论】:

        【解决方案5】:

        必须在textColor属性中设置@drawablexml资源

        这里是示例:Android customized button; changing text color

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          • 1970-01-01
          • 2013-07-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多