how to change font color in selected/focused ListV

2019-01-21 10:36发布

I am struggling with this which apparently is a very simple effect but incredibly haven't found any intutitive way for doing it in Android.

I have a ListView and I managed to customize the background images so the selected item gets highlighted by getting a new background drawable. This I do creating a new style where I set the android:listSelector attribute to point a StateListDrawable where I have specified which drawables to use for every state.

However each ListView item is a LinearLayout where i have two TextViews. My goal is to be able to change the text color of these child views whenever the parent is selected or pressed, at the same time as the background drawable does. I know there is a ColorStateList but haven't been succesful setting that up.

Has anybody succeed getting something like this to work?

Thanks.

5条回答
地球回转人心会变
2楼-- · 2019-01-21 11:07

in your textview propeties

android:textColor="@color/text_selector"

in res/color 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="YOUR_CUSTOM_COLOR" />
    <item android:state_selected="true" android:color="YOUR_CUSTOM_COLOR" />
    <item android:color="YOUR_CUSTOM_COLOR" />
</selector>
查看更多
Ridiculous、
3楼-- · 2019-01-21 11:10

When you are deploying the app for Android 11+ (HoneyComb+), you should use

android:state_activated="true"

for selected list state. For the earlier versions use the combination of:

android:state_checked="true"
android:state_activated="true"

Of course don't forget to include the

android:duplicateParentState="true"

so the view can get the activated/checked state from a parent list view item

查看更多
smile是对你的礼貌
4楼-- · 2019-01-21 11:23

Neither of these are possible answers when your ListView is compromised of a layout that has multiple views. You need to set your child views to:

android:duplicateParentState="true"

Now you can use the methods others have described above to declare your TextViews' colors using a selector such as:

android:textColor="@drawable/my_row_selector"

and I'm sure you're aware, but the selector can be as simple as:

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

As you can see, @color values are allowed. Hope this helps.

Also - android:state_pressed is used in conjunction with the AdapterView.OnItemClickListener.

查看更多
欢心
5楼-- · 2019-01-21 11:26

Also you may create a res/color folder and add a file "text_selector.xml" with the following lines:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:color="#f0f"/>
    <item android:state_pressed="true" android:color="#f0f"/>
    <item android:color="#000"/>
</selector>

After that assign in TextView:

android:textColor="@color/text_selector"
查看更多
兄弟一词,经得起流年.
6楼-- · 2019-01-21 11:30

In order to make it work on selection use the following code:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#fff"/>
    <item android:state_activated="true" android:color="#fff"/>
    <item android:color="#000" />
</selector>

Apparently the key is state_activated="true" state.

查看更多
登录 后发表回答