Выбор фона Android DrawerLayout в ListView

Я разработал приложение с DrawerLayout.

Моя проблема с ListView, когда я нажимаю на элемент, его textColor становится белым, но фон по-прежнему прозрачен, а фон ListView белый. Таким образом, выделенный текст не читается.

Я искал решения и пробовал многие из них, но никто не работает. Я просто хочу изменить цвет фона в #FFCCCCCC, например, когда элемент выбран.

Есть ли у вас какие-либо идеи ?

Макет ящика

    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFDDDDDD"/>

    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#FFF"/>

</android.support.v4.widget.DrawerLayout>

Список навигации

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_margin="15dp" />

    <TextView 
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_gravity="center_vertical"/>

</LinearLayout>

Если у вас есть какое-либо решение... Спасибо :)

Изменить :

Снимок экрана


person Kyu_    schedule 20.05.2013    source источник
comment
Вы можете опубликовать свой вывод   -  person Iftikar Urrhman Khan    schedule 20.05.2013
comment
Готово :) Вы можете увидеть выбранный текст Paramètres   -  person Kyu_    schedule 20.05.2013
comment
попробуйте установить android:cacheColorHint=#00000000 для просмотра списка   -  person Iftikar Urrhman Khan    schedule 20.05.2013
comment
Ничего не изменилось :/   -  person Kyu_    schedule 20.05.2013
comment
попробуйте указать цвет текста TextView android:textColor="@android:color/black"   -  person Vladimir Mironov    schedule 20.05.2013
comment
Но текст не проблема, он становится белым, когда он выбран, и я хочу его. Но я хочу, чтобы фон стал при этом темным, и в этом проблема.   -  person Kyu_    schedule 20.05.2013
comment
Вы когда-нибудь решали это? У меня такая же проблема.   -  person ZNS    schedule 21.09.2013
comment
Пока нет, и я не работаю над этим в настоящее время. Будьте уверены, что я обновлю, если найду решение   -  person Kyu_    schedule 23.09.2013


Ответы (4)


При определении селектора для фона элемента списка также создайте раздел для android:state_activated="true". Re: https://stackoverflow.com/a/15917947/954643 Довольно раздражает, что вызов ListView#setItemChecked() на самом деле не устанавливает выбранное состояние... но я думаю, именно поэтому у них есть отдельный #setSelection. Хотелось бы, чтобы документы были более четкими в отношении состояния, в которое они помещают элементы.

person qix    schedule 19.10.2013

Вы должны установить селектор как для android:background, так и для android:textColor. Дополнительную информацию см. в списке состояний цвета!

Список навигации

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background_selector"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_margin="15dp" />

    <TextView 
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textColor="@drawable/color_selector"
        android:layout_gravity="center_vertical"/>

</LinearLayout>

background_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/holo_blue_light" android:state_pressed="true" />
    <item android:drawable="@color/holo_blue_light" android:state_selected="true" />
    <item android:drawable="@color/blue" />
</selector>

color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
    <item android:state_focused="true" android:state_pressed="true" android:color="#000000" />
    <item android:state_focused="false" android:state_pressed="true" android:color="#000000" />
    <item android:color="#ffffff" />
</selector>
person Nipper    schedule 05.08.2013
comment
Состояние, когда элемент выбран, о котором спрашивает @Kyu_, на самом деле может быть активированным состоянием. - person John; 13.06.2014
comment
В элементах DrawerLayout активируется после того, как вы щелкнули элемент И отпустили его. Это состояние, которое вы получаете, вызывая mDrawerList.setItemChecked(position, true); в вашем Drawer ListView. - person John; 13.06.2014

Фон пункта меню должен указывать на селектор, а не на простое рисование или цвет, что-то в этом роде:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/holo_blue_light" android:state_pressed="true" />
    <item android:drawable="@color/holo_blue_light" android:state_selected="true" />
    <item android:drawable="@color/menu_background" />
</selector>
person Gábor    schedule 26.05.2013
comment
Затем включите некоторый код о том, как вы пытались использовать селекторы, потому что это это способ сделать это. Я прямо внутри приложения, над которым работаю, и его ящик работает нормально с правильно меняющимся фоном. Используя этот подход. :-) - person Gábor; 07.06.2013
comment
Привет, я только что возобновил работу над ящиками, и твое решение меня заинтересовало. Я пытался использовать ваш код, но не работал. Итак, вот мой вопрос: для чего вы применили этот селектор? Элементы в адаптере? Список ? ... ? Спасибо :) - person Kyu_; 12.11.2013
comment
Да, в MenuAdapter я называю их MenuItems, это то, что я добавляю в GetView() MenuAdapter. - person Gábor; 13.11.2013
comment
Возможно, вы ищете активированное состояние, а не выбранное. ‹!-- язык: xml --› ‹селектор xmlns:android=schemas.android.com/ apk/res/android› ‹item android:state_enabled=true android:state_pressed=true android:color=@color/white/› ‹item android:state_activated=true android:state_enabled=true android:color=@color /green/› ‹item android:color=@color/blue/› ‹/selector› - person John; 13.06.2014

на вашем адаптере:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ...

    rowView.setBackgroundResource(R.drawable.YOUR_SELECTOR);
    rowView.setLayoutParams(new ListView.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

    return rowView;
}
person Neco    schedule 29.07.2014