Ответ 1
Я столкнулся с этой точной проблемой. Проблема в том, что фон R.layout.fragment_navigation_drawer_list_item
- это то, что нужно изменить на ваш drawable. Просто добавьте android:background="@drawable/activated_background"
в макет.
Этот вопрос был задан очень много, и я ответил на все ответы. Я по-прежнему остался с голубым фоном по умолчанию для выбранных элементов в моем навигационном ящике. Я новичок в 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)
Я столкнулся с этой точной проблемой. Проблема в том, что фон R.layout.fragment_navigation_drawer_list_item
- это то, что нужно изменить на ваш drawable. Просто добавьте android:background="@drawable/activated_background"
в макет.
Я не смог найти полного ответа на этот вопрос, так вот:
Шаг 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>