【问题标题】:Android selector with textColor [duplicate]带有textColor的Android选择器[重复]
【发布时间】:2016-09-21 08:44:07
【问题描述】:

我已经创建了一个选择器:

btn_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- pressed -->
    <item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true" />

    <!-- focused -->
    <item android:drawable="@drawable/btn_bg_focused" android:state_focused="true" />

    <!-- default -->
    <item android:drawable="@drawable/btn_bg_default" />
</selector>

btn_bg_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/btn_pressed"/>
</shape>

btn_bg_focused.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid
        android:color="@color/reality_fix_yellow"/>
</shape>

btn_bg_default.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke android:width="2dp"
        android:color="@color/btn_default_border_color" />
</shape>

我想在焦点改变时更改text color 按钮。我尝试添加 android:color="color_code"android:textColor="color_code" 但失败了。 请帮助我如何使用选择器更改按钮的文本颜色?

【问题讨论】:

  • 添加
  • @Anas Azeem 你在下面看到我的答案了吗。

标签: android xml android-tv android-selector


【解决方案1】:

这样定义:

res/color目录下创建button_selector.xml文件

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

并在Button 属性中定义这种方式。

<Button
    android:TextColor="@color/button_selector"
/>

【讨论】:

  • 正确的是&lt;Button android:TextColor="@drawable/button_selector"/&gt;尤奇说的
【解决方案2】:

有一个技巧,您可以重复使用背景可绘制资源来更改文本的颜色。

在您的layout.xml 中,按以下方式声明您的按钮backgroundtextColor

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/btn_bg"
    android:textColor="@drawable/btn_bg"
    android:text="Hello"  />

现在,在您的 drawable/btn_bg.xml 中,将 android:color="@color/your_color_code" 定义为 item 属性:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- pressed -->
    <item android:color="@color/md_green_500" android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true" />

    <!-- focused -->
    <item android:color="@color/md_red_500" android:drawable="@drawable/btn_bg_focused" android:state_focused="true" />

    <!-- default -->
    <item android:color="@color/md_blue_500" android:drawable="@drawable/btn_bg_default" />
</selector>

您应该能够看到按钮的背景和文本颜色变化。

【讨论】:

    【解决方案3】:

    您可以在自己的 TextView 类上实现这一点,该类扩展 Android TextView 类并覆盖 onTouchEvent(MotionEvent event)

    然后您可以根据传递的 MotionEvent 修改实例文本颜色。

    例如:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
           // Change color
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
           // Change it back
        }
        return super.onTouchEvent(event);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多