使用选择器更改TextView文本颜色

raf*_*uru 44 android android-widget

我正在尝试使用TextView在tabhost上定义TabWidget的样式.

我刚刚为bgcolor创建了一个选择器并且工作正常,但我想为textColor创建一个选择器,但文本颜色不会改变:

这是我的tab_text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />

</selector>
Run Code Online (Sandbox Code Playgroud)

当我尝试在textView上使用时,这是代码:

TextView txtTab=new TextView(this);
        txtTab.setTextColor(R.drawable.tab_text_selector);
        txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
        txtTab.setGravity(Gravity.CENTER);
        txtTab.setText("Agregar Idea");
Run Code Online (Sandbox Code Playgroud)

我知道文本颜色在任何情况下都必须是白色,但事实并非如此.

Sag*_*hah 88

1)使用如下的tab_text_selector.xml并将其放入res/color文件夹:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />
    <item android:color="#504f4f" /> <!-- default case -->
</selector>
Run Code Online (Sandbox Code Playgroud)

并将其设置为您的textview,如下所示..

TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));
Run Code Online (Sandbox Code Playgroud)

2)第二个选项是如果您在xml中使用textview而不是以编程方式使用,则使用tab_text_selector.xml,如下所示:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="TextView"
    android:textColor="@??drawable/tab_text_sel??ector" />
Run Code Online (Sandbox Code Playgroud)

  • android:textColor ="@ drawable/tab_text_selector"确切地说 (15认同)
  • getColor不起作用 - 您需要使用@ffeandro的答案中提到的getColorStateList().在4.4.2上验证 (6认同)
  • @BAZTED您甚至尝试过`android:textColor =“ @ drawable / tab_text_selector”`来更改文本颜色吗?通过实际执行一些代码,您将意识到android:textColor =“ @ color / tab_text_selector”实际上是正确的答案。我不知道有人误导您会如何支持您的评论。 (2认同)

ffl*_*dro 52

你必须使用getColorStateList().对于xml,请参阅此处.

我也在努力解决这个问题.如果要使用a state list,则需要在colorresources文件夹而不是文件夹中声明它drawable,并使用该setTextColor(getResources().getColorStateList(R.color.tab_text_selector))方法.


ρяσ*_*я K 29

使用这种方式:

tab_text_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="#FF111111"/>  
    <item android:state_focused="true" android:color="#FF222222"/>    
    <item android:state_selected="true" android:color="#FF333333"/> 
</selector>
Run Code Online (Sandbox Code Playgroud)

TextView的:

TextView txtTab = new TextView(this);

XmlResourceParser xrp = getResources().getXml(R.drawable.tab_text_selector);  
try {  
    ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);  
    txtTab.setTextColor(csl);  
} catch (Exception e) {  } 

txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");
Run Code Online (Sandbox Code Playgroud)

但是把颜色放进去更好 /res/color/yourcolor.xml

  • 您是否有理由以编程方式设置TextView的`textColor`?为什么不在布局中添加`android:textColor ="@ drawable/tab_text_selector"` (6认同)
  • Android Studio(我假设Eclipse)会抱怨getXml()期望XML资源并抛出红色下划线错误,但您仍然可以编译并运行您的应用程序.如果这会让你烦恼,可以将R.drawable或R.color中的选择器XML文件移动到R.xml,你的IDE应该停止抱怨. (2认同)

小智 11

只需为文本颜色制作选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/drawer_color" />
<item android:state_focused="false" android:color="@android:color/white" />
<item android:state_selected="true" android:color="@color/drawer_color" />
Run Code Online (Sandbox Code Playgroud)

然后设置Textview的textColor属性,设置clickable = true

<TextView
    android:clickable="true"
    android:textColor="@drawable/text_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/registration"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />
Run Code Online (Sandbox Code Playgroud)


mr.*_*fox 6

@ ffleandro,@ρяσѕρєяK答案最好的变种,我认为使用ColorStateList最佳选择Android的旧版本和最新版本.

int[][] states = new int[][] {
    new int[] { android.R.attr.state_pressed}, // pressed
    new int[] { android.R.attr.state_focused}, // focused
    new int[] {}
};
int[] colors = new int[] {
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.white)  // white
};
ColorStateList list = new ColorStateList(states, colors);
mTextView.setFocusable(true);
mTextView.setClickable(true);
mTextView.setTextColor(list);
Run Code Online (Sandbox Code Playgroud)