Как изменить цвет элементов ListView в фокусе и при щелчке

Я ответил бы, “because , Java сосет ”, но с другой стороны, возможно, это слишком очевидно †¦ В;-)

27
задан Greg 22 November 2010 в 16:10
поделиться

3 ответа

Вот хорошая статья о том, как использовать селекторы со списками.

Вместо того, чтобы установить в качестве фона android: ListView, я думаю, что вы хотите установить android: listSelector, как показано ниже:

<ListView android:id="@+id/list" 
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" 
  android:layout_gravity="center"
  android:divider="@null" 
  android:dividerHeight="0dip"
  android:listSelector="@drawable/list_selector" />
4
ответ дан 28 November 2019 в 04:22
поделиться

Объявите компоненты элемента списка как окончательные вне вашего setOnClickListener или чего-либо, что вы хотите применить к вашему элементу списка, например:

final View yourView;
final TextView yourTextView;

И в переопределении onClick или любого другого метода, который вы используете, просто установите цвета по мере необходимости, как this:

yourView.setBackgroundColor(Color.WHITE/*or whatever RGB suites good contrast*/);
yourTextView.setTextColor(Color.BLACK/*or whatever RGB suites good contrast*/);

Или без окончательного объявления, если, скажем, вы реализуете onClick () для пользовательского адаптера для заполнения списка, это то, что я использовал в getView () для моего setOnClickListener / onClick ( ):

//reset color for all list items in case any item was previously selected
for(int i = 0; i < parent.getChildCount(); i++)
{
  parent.getChildAt(i).setBackgroundColor(Color.BLACK);
  TextView text=(TextView) parent.getChildAt(i).findViewById(R.id.item);
  text.setTextColor(Color.rgb(0,178,178));
}
//highlight currently selected item
 parent.getChildAt(position).setBackgroundColor(Color.rgb(0,178,178));
 TextView text=(TextView) parent.getChildAt(position).findViewById(R.id.item);
 text.setTextColor(Color.rgb(0,178,178));
0
ответ дан 28 November 2019 в 04:22
поделиться

Дочерние представления в строке списка должны рассматриваться как выбранные, если выбрана родительская строка, поэтому вы должны иметь возможность просто установить нормальное состояние drawable / color-list для представлений, которые вы хотите изменить, без необходимости использовать грязный код Java , См. этот пост SO .

В частности, вы должны установить textColor ваших textViews на ресурс XML, подобный этому:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:drawable="@color/black" /> <!-- focused -->
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black" /> <!-- focused and pressed-->
    <item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed -->
    <item android:drawable="@color/black" /> <!-- default -->
</selector> 
37
ответ дан 28 November 2019 в 04:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: