繁体   English   中英

按下时更改按钮文本颜色

[英]change button text color when pressed

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

是的,你可以这样做:

布局/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>

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

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

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

喜欢Konstantin Burov在另一期提出的解决方案: Android自定义按钮; 改变文字颜色

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

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

然后您可以在按钮中使用该选择器 drawable 更改文本颜色属性,如下所示。 请注意,下面示例中的选择器名为“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"

你必须在你的代码中做到这一点。 试试这个:

    mBtn = ((Button) findViewById( R.id.button1 ));
    mBtn.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View v) {
            mBtn.setTextColor( Color.RED );
        }
    });

宣布:

private Button mBtn;

您必须在textColor属性中设置@drawable xml 资源

下面是示例: Android 自定义按钮; 改变文字颜色

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="false"
        android:color="#FFFFFF" />
    <item
        android:state_pressed="true"
        android:color="#000000" />
</selector>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM