按下时更改按钮文本颜色

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

是的,你可以这样做:

布局/main_layout.xml:

.....
    <Button
      android:id="@+id/button"
      android:layout_
      android:layout_
      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

【讨论】:

以上是关于按下时更改按钮文本颜色的主要内容,如果未能解决你的问题,请参考以下文章

按下时更改操作栏按钮的背景颜色

PyQt5 QPushButton setSyleSheet 按下时不改变按钮颜色

如何使用背景颜色设置圆形按钮并在按下时更改颜色

ListItem 应在按下时更改背景颜色、文本和图像的颜色

使用 TouchableHighlight 在 React Native 中按下时如何更改按钮颜色?

SwiftUI,按下时如何更改视图(不使用按钮)颜色?