0

У меня есть ListView и создал xml-файл для ListView элементов.Как определить цвет для выбранных TextViews один раз в Android?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_selector_back" 
    android:minHeight="?attr/listPreferredItemHeight" 
    android:orientation="vertical"> 

    <CheckedTextView 
     android:id="@+id/list_item_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
     android:textColor="@color/list_item_selector_fore" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal"> 

     <TextView 
      android:id="@+id/list_item_author" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="@color/list_item_selector_fore" /> 

     <!-- and many more TextView elements --> 

    </LinearLayout> 
</LinearLayout> 

list_item_selector_fore.xml:

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

Как вы можете видеть, я определил фон один раз в корне LinearLayout. Но я должен был установить android:textColor="@color/list_item_selector_fore" за каждые TextView. Я пробовал его с передним планом, но ничего не произошло. Как я могу получить это умнее?

КАК LOOK: two list view items

+0

Вы можете программно найти все ребенок вашего 'LinearLayout' и цвета текста для всех из них. – user3486470

+0

Пожалуйста, разместите изображение типа просмотра, которое вы ищете. @ EV221 – Lampard

+0

чего вы хотите достичь? –

ответ

0

Если я правильно понял вопрос правильно, вы хотите изменить цвет текста внутри TextView. Из вашего XML, кажется, вы хотите быть onClick поэтому вы можете сделать это:

TextView textView = (TextView) findViewById(R.id.myTextView); 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView.setTextColor('set text color here'); 
      } 
     }); 

EDIT:

Если у вас есть эти элементы внутри ListView я предположил бы, что самый простой способ для вы достигнете того, что хотите, установите OnItemClickListener, а затем измените textColor на основе события OnItemClick, которое может выглядеть примерно так:

ListView listView = (ListView) findViewById(R.id.listView); 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      TextView textView = (TextView) view.findViewById(R.id.rowItemTextView); 
      textView.setTextColor('color goes here'); 
     } 
    }); 

Надеюсь, этот короткий фрагмент поведет вас в правильном направлении.

+0

Да, но у меня есть несколько TextView. Я не хочу получать каждый из них вручную. И я хочу изменить цвета в xml. Преимущество этого метода заключается в том, что состояние цвета сохраняется при прокрутке. – EV221

+0

Я вижу, что вы теперь отредактировали, чтобы добавить изображение того, что вы имеете в виду, я отредактирую свой ответ ~ – Max

+0

Проблема в том, что цвет исчезает, когда я прокручиваю из-за утилизации ListView. Но если я использую этот стиль или материал XML, цвет фона по-прежнему присутствует, если я прокручу назад. – EV221

0

Если вы хотите сделать это для всех TextView, лучший способ должен быть подкласс TextView

public class CustomeTextView extends TextView{ 

    public CustomeTextView(Context context) { 
     super(context); 
     this.setTextColor(R.color.white); 
    } 
}