Подтвердить что ты не робот

Пользовательский цвет фона для выбранного элемента с навигационным ящиком "активированный подвал"

Этот вопрос был задан очень много, и я ответил на все ответы. Я по-прежнему остался с голубым фоном по умолчанию для выбранных элементов в моем навигационном ящике. Я новичок в Java, и я смущен насчет "контекстной" части .setAdapter().
Мой проект - это одно действие с несколькими фрагментами, замененными с помощью навигационного ящика.

Вот мой адаптер:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
            // First parameter - Context
            getActionBar().getThemedContext(),
            // Second parameter - Layout for the row
            R.layout.fragment_navigation_drawer_list_item,
            // Third parameter - ID of the TextView to which the data is written
            android.R.id.text1,
            // Forth - the Array of data
            new String[]{
                    getString(R.string.title_section1),
                    getString(R.string.title_section2),
                    getString(R.string.title_section3),
                    getString(R.string.title_section4),
            }));
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);

Контекст здесь происходит из "предварительно приготовленного" навигационного ящика в Android Studio. Я думал, что это будет ответ Цвет фона элемента навигации для выбранного элемента. Поэтому я изменил свой контекст на getActivity().getBaseContext(),, но это ничего не изменило.

Моя тема (styles.xml):

<resources>
    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <!-- API 14 theme customizations can go here. -->
        <item name="android:actionBarStyle">@style/ActionBar</item>
    </style>

    <!-- Navigation Drawer styling -->
    <style name="NavDrawerItemSelected" parent="AppBaseTheme">
        <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item>
    </style>
</resources>

activated_background в каталоге 'drawables':

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@color/green" />
    <item android:state_selected="true" android:drawable="@color/green" />
    <item android:state_pressed="true" android:drawable="@color/green" />
    <item android:state_checked="true" android:drawable="@color/green" />        
    <item android:drawable="@android:color/transparent" />
</selector>

Я не знаю, какое из этих состояний должно использоваться, поэтому я добавил все, что мог найти.
Наконец, когда выбран элемент mDrawerListView.setItemChecked(position, true);.
Все работает, за исключением настраиваемого стиля темы. (мин. API = 11, тестирование по API 17 AVD)

4b9b3361

Ответ 1

Я столкнулся с этой точной проблемой. Проблема в том, что фон R.layout.fragment_navigation_drawer_list_item - это то, что нужно изменить на ваш drawable. Просто добавьте android:background="@drawable/activated_background" в макет.

Ответ 2

Я не смог найти полного ответа на этот вопрос, так вот:

Шаг 1. Укажите макет элемента списка, который будет использовать ваш адаптер, в этом примере мы указываем: R.layout.fragment_navigation_drawer_list_item

Так же:

mDrawerListView.setAdapter(new ArrayAdapter<String>(
        // First parameter - Context
        getActionBar().getThemedContext(),
        // Second parameter - Layout for the row
        R.layout.fragment_navigation_drawer_list_item,
        // Third parameter - ID of the TextView to which the data is written
        android.R.id.text1,
        // Forth - the Array of data
        new String[]{
                getString(R.string.title_section1),
                getString(R.string.title_section2),
                getString(R.string.title_section3),
                getString(R.string.title_section4),
        }))`

Шаг 2. Создайте и настройте fragment_navigation_drawer_list_item.xml, чтобы указать drawable, который будет иметь такой селектор: android:background="@drawable/activated_background" Полный пример:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall"
    android:background="@drawable/activated_background" />

Шаг 3. Создайте и настройте селектор в файле activated_background.xml так же, как в вопросе, он будет выглядеть следующим образом:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@color/green" />
    <item android:state_selected="true" android:drawable="@color/green" />
    <item android:state_pressed="true" android:drawable="@color/green" />
    <item android:state_checked="true" android:drawable="@color/green" />
    <item android:drawable="@android:color/transparent" />
</selector>