Изменить выбор в 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 применит весь список, а не только выбранный элемент списка
Ответы
Ответ 1
Здесь хорошая статья о том, как использовать селекторы со списками.
Вместо того, чтобы устанавливать его как 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" />
Ответ 2
Jax, вы сказали, что:
Проблема в том, что 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>
Ответ 3
Я также столкнулся с вашей проблемой, когда изменение цвета относится ко всему списку.
Но теперь он работает для меня сейчас:
Моя главная страница, содержащая 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>
Это то, что делает вышеприведенный код:
Все записи при первой загрузке являются светло-зелеными.
Прокрутка вверх и вниз с помощью курсора выделяет выбранную запись оранжевым цветом.
Нажатие строки превращает ее в темно-зеленый.
Ответ 4
Как упоминалось в комментариях большое количество примеров, рабочее решение использует форму вместо цвета (я также получал весь список). Вот полное решение:
добавьте эти 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>
Теперь элементы списка должны отображать полупрозрачную зеленую оверлею в нажатом состоянии.
Ответ 5
У меня возникла одна и та же проблема, а затем мне просто нужна простая строка в моем XML-представлении.
android:background="?android:attr/activatedBackgroundIndicator"
Отметьте этот пост: Этот пост может помочь