我正在尝试使用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>
当我尝试在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");
我知道文字颜色在任何情况下都必须是白色,但事实并非如此。
答案 0 :(得分:87)
<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>
并将其设置为您的textview,如下所示..
TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));
<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_selector" />
答案 1 :(得分:50)
您必须使用getColorStateList()。对于xml,请参阅here。
我也在努力解决这个问题。如果您想使用state list
,则需要在color
资源文件夹而不是drawable
文件夹中声明它,并使用setTextColor(getResources().getColorStateList(R.color.tab_text_selector))
方法。
答案 2 :(得分: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>
的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");
但最好将颜色放在/res/color/yourcolor.xml
答案 3 :(得分:11)
只需将Selector设为textcolor
<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" />
然后将Textview的textColor属性设置为set 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" />
答案 4 :(得分:5)
@ 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);
答案 5 :(得分:2)
<item android:state_selected="true" android:color="@android:color/white" />
<item android:state_focused="true" android:color="@android:color/red" />
<item android:state_pressed="true" android:color="@android:color/blue" />
答案 6 :(得分:1)
以下是Android开发人员的参考资料 http://developer.android.com/guide/topics/resources/color-list-resource.html
答案 7 :(得分:1)
创建一个选择器(text_color_selector.xml)并将其放入res / color文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/colorPrimary" android:state_pressed="true" /> <!-- pressed -->
<item android:color="@color/colorPrimary" android:state_focused="true" /> <!-- focused -->
<item android:color="@color/light_gray_b" /> <!-- default -->
</selector>
以以下方式将其添加到您的Textview中:
<TextView
android:id="@+id/tvMenuName"
style="@style/TextViewStyle"
android:layout_marginLeft="@dimen/dimen_15"
android:layout_marginStart="@dimen/dimen_15"
android:textColor="@color/text_color_selector"
android:textSize="@dimen/text_size_16"
tools:text="Home" />
通过编程,您可以这样设置Textview:
TextView tv = (TextView) findViewById(R.id.textView) ;
tv.setTextColor(context.getResources().getColor(R.color.text_color_selector));
希望有帮助。
答案 8 :(得分:0)
您在所有情况下都使用了白色焦点,选择并按下了..
请使用不同颜色的测试。
还必须使用默认情况,并使用某种颜色 black 以及所有情况..当没有使用状态时,将应用默认值。
答案 9 :(得分:0)
最简单有效的解决方案:
Ex :。txtview.setTextColor(ContextCompat.getColorStateList(context,R.color.tab_tv_selector));
答案 10 :(得分:0)
我有一个不同的问题。我尝试了此线程中建议的所有内容,包括以下
@
文件夹移动到drawable
文件夹。 color
android:clickable="true"
这些似乎都不起作用!
但是,最后,我不得不清理项目并使选择器在我的设备上工作。以这种经验为答案的想法会帮助其他开发人员。
因此,最终的工作版本如下。
android:duplicateParentState="true"
文件夹中的选择器文件/res/color
中与TextView
一起添加了