Intereting Posts

Изменить выбор в ListView с оранжевого на зеленый

Как это сделать для выбранного элемента списка.

Я попытался добавить это к android:background

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_pressed="false" android:drawable="@color/android_green" /> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/black_alpha" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@color/black_alpha" /> <item android:drawable="@color/white_alpha" /> </selector> 

Но он не работает, он меняет весь ListView.


Все еще не работает, вот что я до сих пор

:: listview_background

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:drawable="@color/black_alpha" /> <item android:drawable="@color/white_alpha" /> </selector> 

:: Мое мнение, использующее приведенное выше

 <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/round" android:listSelector="@drawable/listview_background"> </ListView> 

Проблема в том, что black_alpha применит весь список, а не только выбранный элемент списка

Solutions Collecting From Web of "Изменить выбор в ListView с оранжевого на зеленый"

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

Вместо того, чтобы устанавливать его как android:background 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" /> 

Джейкс, ты сказал, что:

Проблема в том, что black_alpha применит весь список, а не только выбранный элемент списка

У меня такая же проблема. Поиграв с ним некоторое время, я смог заставить его прекратить применять цвет ко всему списку, используя изображение размером 3 × 3 цвета, которое я хотел, вместо применения цвета. Поэтому по какой-то странной причине, если вы используете цвет, вы получаете странное фоновое поведение, когда используете png, он отлично работает. : S

Так что это один из способов обойти это.

—–Другой путь———-

Я нашел лучшие результаты, когда я установил селектор listView, чтобы не иметь таких состояний:

Рез / рисуем / list_selector.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> </selector> 

Затем я забочусь обо всех состояниях на фоне элемента списка. НЕ в селекторе. Я обнаружил, что у меня больше контроля.

Рез / цвет / list_item_bg.xml

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

Тогда вот мой пункт списка:

разреш / макет / simple_list_item.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingRight="45dip" android:paddingBottom="2dip" android:layout_gravity="center_vertical" android:background="@color/list_item_bg"> <ImageView android:id="@+id/arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="8dip" android:src="@drawable/list_item_arrow" /> <TextView android:id="@+id/simple_list_item_label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:textSize="12sp" android:textColor="@color/list_label_color"/> </LinearLayout> 

Я также столкнулся с вашей проблемой, когда изменение цвета относится ко всему списку.

Но теперь его работа для меня сейчас:

Моя главная страница, содержащая listview (заметила, что здесь я не использовал listselector):

  <ListView android:id="@+id/controlList" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

Вместо этого примените listselector к getView, как показано в этой строке (convertView), чтобы использовать listselector.xml в drawable foldable, когда его состояние изменяется, например нажатие, сфокусированное …:

 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null){ LayoutInflater li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); convertView = li.inflate(R.layout.control_list, null); viewHolder = new ViewHolder(); viewHolder.topText = (TextView) convertView.findViewById(R.id.toptext); viewHolder.bottomText = (TextView) convertView.findViewById(R.id.bottomtext); convertView.setTag(viewHolder); } else{ viewHolder = (ViewHolder) convertView.getTag(); } //each convertView will be assigned the listselector convertView.setBackgroundResource(R.drawable.listselector); viewHolder.topText.setText(testSchemes[position]); //viewHolder.vText.setText(testDetails[position]); return convertView; } 

И, наконец, мой listselector.xml:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:state_selected="false" android:drawable="@color/lightgreen" /> <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. --> <item android:state_pressed="true" android:drawable="@color/darkgreen" /> <item android:state_selected="true" android:state_pressed="false" android:drawable="@color/orange" /> </selector> 

Это то, что делает вышеприведенный код: все записи при первой загрузке являются светло-зелеными. Прокрутка вверх и вниз с помощью курсора выделяет выбранную запись оранжевым цветом. Нажатие строки превращает ее в темную.

Как упоминалось в комментариях bigstones, рабочее решение использует форму вместо цвета (я также получал весь список). Вот полное решение:

Добавьте эти 2 атрибута в список:

 android:drawSelectorOnTop="true" android:listSelector="@drawable/my_list_selector" 

Добавьте my_list_selector.xml в папку для вывода:

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#77526F35"/> </shape> 

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

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

  android:background="?android:attr/activatedBackgroundIndicator" 

Проверьте этот пост: Этот пост может помочь