【问题标题】:Android customized button; changing text color安卓自定义按钮;改变文字颜色
【发布时间】:2011-06-09 05:21:22
【问题描述】:

我制作了一个按钮,可以在不同状态下更改背景可绘制对象,这样:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed -->
     <item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused -->
     <item android:drawable="@drawable/btn_location"/> <!-- default -->
</selector>

这里的问题是我也在尝试更改 textColor,就像我对 drawable 所做的那样,但我做不到。我已经尝试过 android:textColor 和 android:color 但是第一个不起作用,而秒数改变了我的背景。

下一个代码是我布局的一部分。关于文本颜色,它仅适用于正常状态的文本颜色,因此在按下时不会将其更改为白色

<Button android:id="@+id/location_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:background="@drawable/location"          
        android:textSize="15sp"
        android:textColor="@color/location_color"
        android:textColorHighlight="#FFFFFF"
   />

有人知道吗?

【问题讨论】:

    标签: android android-button android-selector


    【解决方案1】:

    为您的按钮创建一个有状态的颜色,就像您为背景所做的那样,例如:

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

    将 xml 文件放在 res/drawable 文件夹的文件中,即 res/drawable/button_text_color.xml。然后只需将drawable设置为文本颜色:

    android:textColor="@drawable/button_text_color"
    

    【讨论】:

    • 请注意(至少对我而言)存在一个错误,必须将“正常”状态( 在您的答案中)放在最后的文件,如你的答案。将正常状态放在文件顶部(在其他状态之上)会阻止选择器工作。
    • 这不是错误。这是状态选择应该起作用的方式。这不是一个最佳匹配,而是第一个匹配的会成功。
    • 你如何使用整数值来做到这一点?我正在尝试对文本填充做类似的事情。
    • 花了一些时间尝试这个无济于事,然后发现我仍然将它设置为背景属性而不是 textcolor 属性。不习惯看到 textcolor 采用可绘制对象!
    • 颜色选择器最好位于res/color文件夹中。并在调用时使用:android:textColor="@color/button_text_color"
    【解决方案2】:

    另一种方法是在你的课堂上:

    import android.graphics.Color; // add to top of class  
    
    Button btn = (Button)findViewById(R.id.btn);
    
    // set button text colour to be blue
    btn.setTextColor(Color.parseColor("blue"));
    
    // set button text colour to be red
    btn.setTextColor(Color.parseColor("#FF0000"));
    
    // set button text color to be a color from your resources (could be strings.xml)
    btn.setTextColor(getResources().getColor(R.color.yourColor));
    
    // set button background colour to be green
    btn.setBackgroundColor(Color.GREEN);
    

    【讨论】:

    • 这将改变按钮上的文本颜色,但在按钮的不同状态(例如按下)期间将保持该颜色。在大多数情况下,当按钮的背景颜色在状态期间发生变化时,还希望更改按钮的文本颜色,这就是@Konstantin Burov 的回答派上用场的地方。
    • 这没有回答原始问题。问题是关于如何为文本视图定义基于状态的颜色,就像您可以设置基于状态的可绘制对象一样。
    【解决方案3】:

    好的很简单先去 1. res-value 并打开 colors.xml 2.复制定义文本的1个,例如 #FF4081 并更改名称,例如我更改为白色并更改其值,例如我更改为 #FFFFFF 以获得这样的白色值

    <color name="White">#FFFFFF</color>
    

    然后在你的按钮内添加这一行

     b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White));
    

    好的 b3 是我的按钮的名称,所以更改了你的按钮的名称,如果你使用白色,如果你改变不同的颜色,那么所有其他按钮都将相同,然后将白色更改为你的颜色名称,但首先你已经定义了该颜色在 colors.xml 中,就像我在 pont 2 中解释的那样

    【讨论】:

      【解决方案4】:

      改变按钮的文字颜色

      因为这个方法现在已经被弃用了

      button.setTextColor(getResources().getColor(R.color.your_color));
      

      我使用以下:

      button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));
      

      【讨论】:

        【解决方案5】:

        像这样使用getColorStateList

        setTextColor(resources.getColorStateList(R.color.button_states_color))
        

        而不是getColor

        setTextColor(resources.getColor(R.color.button_states_color))
        

        【讨论】:

        • 帮助谢谢,在 api 30 上这是这样做的方式
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        相关资源
        最近更新 更多