Android: отключение подсветки в listView нажмите
Я хочу отключить оранжевую подсветку, которая возникает при касании строки listView. До сих пор в моем xml я пробовал следующее:
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
дополнительная информация: я хочу, чтобы была нулевая разница, когда пользователь касается экрана этого объекта listView.
15 ответов
добавьте это в свой xml:
android:listSelector="@android:color/transparent"
и для проблемы это может сработать (я не уверен, и я не знаю, есть ли лучшие решения):
можно использовать ColorStateList для вашего TextView.
ответ RoflcoptrException должен сделать трюк, но по какой-то причине он не сработал для меня, поэтому я публикую решение, которое сработало для меня, надеюсь, что это поможет кому-то
<ListView
android:listSelector="@android:color/transparent"
android:cacheColorHint="@android:color/transparent"
/>
оранжевый эффект подсветки-это стиль в ListView. в этой статье дает хороший обзор того, как переопределить стиль listView.
по сути, у вас есть селектор, который определяет различные элементы стиля на основе текущего состояния.
посмотреть этот короткий и быстрый решение https://stackoverflow.com/a/12242564/185022
С ListView: Отключить Выделение Фокуса,
когда вы ListAdapter
использовать следующий код
ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c,
new String[] { "Name", "Score" }, to)
{
public boolean areAllItemsEnabled()
{
return false;
}
public boolean isEnabled(int position)
{
return false;
}
};
это переопределит BaseAdapter
класса. Он также отменяет белую границу между клетками.
добавьте это также в Ur XMl вместе с listselector..надеюсь, это сработает
<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/>
если вы используете ArrayAdapter
или BaseAdapter
для заполнения элементов списка. Override
на isEnabled
метод и возвратить false
.
@Override
public boolean isEnabled (int position) {
return false;
}
после нескольких "google" и тестирования на виртуальных и реальных устройствах я замечаю, что мой код ниже работает:
ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
public boolean isEnabled(int position)
{
return false;
}
};
обратите внимание, что я опустил areAllItemsEnabled()
часть.
ничего не помогает мне, кроме этого:
transparent_drawable.xml
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>
layout.xml
:
android:listSelector="@drawable/transparent_drawable"
код
listView.setSelector(getResources().getDrawable(R.drawable.transparent));
и добавьте небольшое прозрачное изображение в папку drawable.
Как: прозрачный.в XML
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#00000000"/>
</shape>
для меня android:focusableInTouchMode="true"
- Это путь. android:listSelector="@android:color/transparent"
бесполезно. Обратите внимание, что я использую пользовательский listview с несколькими объектами в каждой строке.
в качестве альтернативы:
listView.setSelector(android.R.color.transparent);
или
listView.setSelector(new StateListDrawable());
есть быстрый и простой способ сделать это: В методе:
private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
//TODO
((ListView)sender).SelectedItem = null;
}
надеюсь, это поможет;)
Если вы хотите отключить выделение для одного элемента представления списка,но сохранить ячейку включенной, установите цвет фона для этой ячейки, чтобы отключить выделение.
например, в вашем макете ячейки установите android:background="@color/white"
можно просто pos
что вы получаете от onItemClick
и вообще:
listView.setItemChecked(pos, false);
Это лучший способ, который я знаю