Изменить текстовый цвет Android ListView текст на выделение - PullRequest
5 голосов
/ 24 января 2012

Я не могу понять, что я делаю неправильно ...

У меня есть ListView с пользовательским файлом layout.xml.Там я определяю TextView следующим образом:

<TextView android:layout_height="wrap_content" 
          android:layout_width="wrap_content"
          android:text="foo"
          android:textColor="@drawable/listitem_textcolor_selector"/>

listitem_textcolor_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="#ff0000" />
    <item android:state_selected="true" android:color="#ff0000" />
    <item android:state_focused="true" android:color="#ff0000" />
    <item android:color="#000000" />
</selector>

Такого рода работы.Если я выберу строку, она будет правильно менять цвет текста на красный.Единственная проблема в том, что он не останется красным. Через секунду или около того этот цвет изменится на черный.

Основная проблема в том, что фон строки изменит свой цвет, и этот цветостанется, но цвет текста - нет, хотя селектор для самого элемента списка выглядит идентично (ожидайте цвета).

Кто-нибудь может сказать мне, что мне не хватает?Любая помощь приветствуется, поскольку я понятия не имею, как это исправить:)

Спасибо

Редактировать: Может быть, я должен также указать, что я тестирую на SamsungПланшет Galaxy Tab 10.1.Однажды я что-то слышал о "TouchMode", не зная, действительно ли это связано с моей проблемой ...

Ответы [ 4 ]

9 голосов
/ 28 мая 2013

В listitem_textcolor_selector.xml добавьте эти состояния:

        <!-- Activated -->      
<item 
    android:state_activated="true" 
    android:color="#ff0000" />

        <!-- Active -->      
<item 
    android:state_active="true" 
    android:color="#ff0000" />  

После этого выбранный элемент будет сохранять свое цветное состояние до тех пор, пока не будет выбрано что-то другое.

Надеюсь, это помогло.

4 голосов
/ 27 мая 2014

Я выиграл проблему! В селекторе:

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

В действии: myListView.setChoiceMode (ListView.CHOICE_MODE_SINGLE);

public void onItemClick(AdapterView<?> parent, View view,
                      int position, long id) {
                     pl=position;
                     myListView.setItemChecked(pl, true);
                     adapter.notifyDataSetChanged();
                          .....

item.xml:

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:textColor="@drawable/selector"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    />

И мой отмеченный пункт красным цветом после того, как я щелкнул по ним. Только один проверенный товар. Наслаждайтесь!

1 голос
/ 24 января 2012

Я получил трюк. если вы используете пользовательский XML для элемента списка, вы можете изменить цвет текста, например:

custom_listitem:

<?xml version="1.0" encoding="utf-8"?>     
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dip"
        android:paddingRight="10dip"
        android:paddingTop="7dip"
        android:paddingBottom="7dip"
        android:textSize="18sp"
        android:textStyle="bold"
        android:textColor="@drawable/listitem_textcolor_selector"
         />

И теперь вам нужно будет использовать это XML-имя для вашего адаптера массива, который вы используете для заполнения списка.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.custom_listitem, options);
listView.setAdapter(adapter);
0 голосов
/ 24 января 2012

сохранить listitem_textcolor_selector.xml в color folder of your res и затем использовать его следующим образом: android:textColor="@color/listitem_textcolor_selector"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...