这是布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/settings_selector"
android:clickable="true"
android:id="@+id/llRecentChanges"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:paddingLeft="5dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/llRecentChanges2"
android:layout_weight="1"
android:layout_gravity="center_vertical">
<TextView
android:id="@+id/tvAbout"
android:text="@string/settings_recentchanges"
android:gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16dp"
android:textColor="@drawable/settings_selector_txt" >
</TextView>
<TextView
android:id="@+id/tvAbout2"
android:text="@string/settings_recentchanges2"
android:gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/settings_selector_txt"
android:textSize="10dp">
</TextView>
</LinearLayout>
</LinearLayout>
这是settings_selector_txt xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true"
android:state_pressed="false"
android:color="#FFFFFF" />
<item android:state_focused="true"
android:state_pressed="true"
android:color="#ffa800" />
<item android:state_focused="false"
android:state_pressed="true"
android:color="#ffa800" />
<item android:color="#FFFFFF" />
</selector>
或者
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#444"/>
<item android:state_focused="true" android:color="#444"/>
<item android:state_pressed="true" android:color="#444"/>
<item android:color="#ccc"/>
</selector>
或者
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
<item android:state_focused="true" android:state_pressed="true" android:color="#000000" />
<item android:state_focused="false" android:state_pressed="true" android:color="#000000" />
<item android:color="#ffffff" />
</selector>
他们都没有工作。将选择器xml放到颜色文件夹也没有解决方案。 有什么想法吗?
答案 0 :(得分:34)
确保您的TextView已准备好收听您申请的州。 例如,为了能够达到“state_pressed”,您的textView应该是可点击的:
android:clickable="true"
编辑:我们走了。这种布局完成了这项工作。请注意,收集click事件的View是linearLayout,但由于“duplicateParentState”设置为true,TextView会再现它。颜色选择器将处理不同状态的颜色。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/testLlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:clickable="true" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@drawable/textview_selector"
android:duplicateParentState="true"
android:text="TextView" />
</LinearLayout>
这是颜色选择器的代码。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="#444"/>
<item android:state_focused="true" android:color="#444"/>
<item android:state_pressed="true" android:color="#444"/>
<item android:color="#ccc"/>
</selector>
应该是它。
答案 1 :(得分:22)
无需将android:clickable="true"
设置为TextView或android:duplicateParentState="true"
。
的解决方案的
步骤1:在 res / color 文件夹下定义颜色选择器(Jose L Ugia的颜色选择器适用于此。)
第2步:将此颜色选择器设置为TextView为android:textColor="@color/m_text_selector"
(而不是@drawable / * !!!)
注意:如果要以编程方式设置textColor选择器,则必须将选择器作为颜色状态列表而不是颜色;
textView.setTextColor(getResources().getColorStateList(R.color.m_text_selector));
就这样。
答案 2 :(得分:1)
确保在“可点击”布局之前可能包装TextView的所有布局也具有duplicateParentState =“true”,否则,文本视图将无法达到所需的元素状态。
答案 3 :(得分:1)
我认为使用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);
答案 4 :(得分:0)
您必须在代码中设置此项:android:clickable="true"
for TextViews