Android自定义按钮;更改文字颜色


251

我制作了一个按钮,可以通过以下方式在不同状态下更改背景可绘制:

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

这里的问题是,我也尝试像对drawable一样更改textColor,但是我不能。我已经尝试过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"
   />

有人知道了吗?

Answers:


579

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

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

15
请注意(至少对我而言)存在一个错误,即必须将“正常”状态(答案中的<item android:color =“#ffffff” />)放置在文件的末尾,就像您的答案一样。将正常状态放在文件顶部(在其他状态之上)会阻止选择器工作。
克里斯·布朗特

58
这不是错误。这就是状态选择应该起作用的方式。这不是最佳匹配,而是合适的匹配。
superjos 2011年

您如何使用整数值执行此操作?我正在尝试对文本填充进行类似的操作。
elimirks

花了一些时间尝试都无济于事,然后发现我仍然将其设置为background属性,而不是textcolor属性。不习惯看到textcolor成为可绘制对象!
2014年

20
如果颜色选择器位于res/color文件夹中,则可能会更好。致电时,请使用:android:textColor="@color/button_text_color"
贾斯汀

16

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

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

1
这将更改按钮上的文本颜色,但在按钮的不同状态(例如,按下)期间将保持该颜色。在大多数情况下,当按钮的背景颜色在状态下发生变化时,也希望也更改按钮的文本颜色,这就是@Konstantin Burov的答案很方便的地方。
Dzhuneyt 2014年

1
这不能回答原始问题。问题是关于如何为文本视图定义基于状态的颜色,就像可以设置基于状态的可绘制对象一样。
炼金术士

4

好吧,非常简单,首先转到1。res-valuse并打开colors.xml 2.复制已定义文本的1个,例如#FF4081并更改名称,例如,我更改为白色,并更改其值,例如,我更改为#FFFFFF像这样的白色值

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

然后在按钮内添加此行

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

好的b3是我的按钮的名称,因此如果您使用白色,则更改其他按钮的名称将相同,如果您使用白色,则更改其他颜色,然后将白色更改为您的颜色名称,但首先您要用颜色定义该颜色。像我在pont 2中解释的xml


1

更改按钮的文字颜色

因为现在不推荐使用此方法

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

我使用以下内容:

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

0

使用getColorStateList这样的

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

代替 getColor

setTextColor(resources.getColor(R.color.button_states_color))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.