Я использую новую библиотеку поддержки дизайна Android, чтобы реализовать панель навигации в моем приложении.
Не могу понять, как изменить цвет выбранного предмета!
Вот xml меню:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/navigation_item_1"
android:icon="@drawable/ic_1"
android:title="@string/navigation_item_1"/>
<item
android:id="@+id/navigation_item_2"
android:icon="@drawable/ic_2"
android:title="@string/navigation_item_2"/>
</group>
И вот xml-файл navigationview, который помещается внутри android.support.v4.widget.DrawerLayout
:
<android.support.design.widget.NavigationView
android:id="@+id/activity_main_navigationview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:itemIconTint="@color/black"
app:itemTextColor="@color/primary_text"
app:menu="@menu/menu_drawer">
<TextView
android:id="@+id/main_activity_version"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:textColor="@color/primary_text" />
</android.support.design.widget.NavigationView>
Спасибо за помощь !
[РЕДАКТИРОВАТЬ] Я уже рассматривал такие решения, как это: Изменить цвет фона меню Android .
Это похоже на хитрость, и я подумал, что с новой библиотекой поддержки дизайна можно было бы добавить что-то более чистое?
Ответы:
Вы можете добиться этого с помощью ресурса Color State Resource . Если вы заметили внутри
NavigationView
себя, вы используетеЗдесь вместо использования
@color/black
или@color/primary_test
используйтеColor State List Resource
. Для этого сначала создайте новыйxml
(например, drawer_item.xml) внутриcolor
каталога (который должен находиться внутриres
каталога). Если у вас еще нет каталога с именемcolor
, создайте его.Теперь внутри
drawer_item.xml
сделай что-нибудь вроде этогоПоследним шагом будет изменение вашего
NavigationView
Как это можно использовать отдельные цвета список состояний Ресурсы
IconTint
,ItemTextColor
,ItemBackground
.Теперь, когда вы устанавливаете элемент как отмеченный (внутри
xml
или программно), конкретный элемент будет иметь другой цвет, чем те, которые не отмечены.источник
Я считаю,
app:itemBackground
что ожидает рисования. Итак, следуйте инструкциям ниже:Создайте файл
highlight_color.xml
с возможностью рисования со следующим содержимым:Создайте еще один файл
nav_item_drawable.xml
со следующим содержимым:Наконец, добавьте
app:itemBackground
тег в NavView:здесь файл highlight_color.xml определяет сплошной цвет фона. Позже этот цвет для рисования назначается селектору nav_item_drawable.xml.
Это сработало для меня. Надеюсь, это поможет.
******************************************** ОБНОВЛЕНО *** ******************************************
Хотя вышеупомянутый ответ дает вам точный контроль над некоторыми свойствами, но способ, который я собираюсь описать, кажется более ТВЕРДЫМ и немного КЛАССНЫМ .
Итак, что вы можете сделать, вы можете определить ThemeOverlay в
styles.xml
для NavigationView следующим образом:теперь примените этот ThemeOverlay к
app:theme
атрибуту NavigationView, например:Я надеюсь, это поможет.
источник
android:background="@drawable/nav_item_drawable"
для других виджетов, таких как RadioButton, Checkbox, Button и т. Д. Уменьшает количество ненужных программ для обработкиsetOnCheckedChangeListener
только для выделения цвета.Каждый
NavigateItem
раз приNavigateView
нажатии элемента вДобавить
NavigationItemSelectedListener
вNavigationView
источник
setChecked(true)
). Я вижу, как меняется цвет отмеченного элемента, но я не могу его изменить, цвет всегда является более светлой версией фона навигационного представления.setChecked(true)
наView
изменения цвета фона Шифрование до темы , что устройство , которое использует. Если вы измените фон элемента на какой-либо другой цвет, вам нужно раздувать макетDrawerLayout
илиNavigationView
и обрабатывать его самостоятельно.Вот еще один способ добиться этого:
}
источник
Вот как это можно сделать с помощью метода onCreate в Activity:
источник
Шаг 1: Создайте отмеченный / непроверенный селектор:
selector.xml
Шаг 2: используйте атрибут xml
app:itemTextColor
вNavigationView
виджете для выбора цвета текста.Шаг 3:
По какой-то причине, когда вы
NavigationView
нажимаете элемент в меню, это не рассматривается как проверка кнопки. Поэтому вам нужно вручную установить флажок для выбранного элемента и очистить ранее выбранный элемент. Используйте нижеприведенный слушатель, чтобы сделать этоШаг 4:
Чтобы изменить цвет значка, используйте
app:iconTint
атрибут вNavigationView
пунктах меню и установите тот же селектор.Результат:
источник