25

Я пытаюсь использовать NavigationView для реализации NavigationDrawer. Я добавил разделитель, установив идентификатор группы в меню. Однако я не вижу разделителя. Я думаю, это потому, что цвет разделителя совпадает с цветом фона. Поэтому я хочу изменить цвет разделителя. Но я не могу изменить его. Может кто-нибудь мне помочь?Как изменить цвет разделителя в NavigationView?

На снимке экрана, похоже, есть место для разделителя между History и Settings, но вы не можете увидеть его.

enter image description here

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:fitsSystemWindows="true" 
    tools:context=".ui.MapActivity"> 

    <LinearLayout 
     android:id="@+id/main_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include layout="@layout/toolbar_actionbar" /> 

     <!--main content--> 
    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@color/navdrawer_background" 
     app:insetForeground="#4000" 
     app:itemTextColor="@color/navdrawer_item_text_color" 
     app:itemIconTint="@color/navdrawer_item_icon_tint" 
     app:headerLayout="@layout/drawer_header" 
     app:menu="@menu/drawer"/> 
</android.support.v4.widget.DrawerLayout> 

drawer.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:id="@+id/group_feature" 
     android:checkableBehavior="single"> 
     <item android:id="@+id/navdrawer_item_map" 
      android:checked="true" 
      android:icon="@drawable/ic_drawer_map" 
      android:title="@string/navdrawer_item_map"/> 
     <item android:id="@+id/navdrawer_item_favourite" 
      android:icon="@drawable/ic_drawer_fav" 
      android:title="@string/navdrawer_item_fav"/> 
     <item android:id="@+id/navdrawer_item_history" 
      android:icon="@drawable/ic_drawer_history" 
      android:title="@string/navdrawer_item_history"/> 
    </group> 
    <group android:id="@+id/group_settings" 
     android:checkableBehavior="single"> 
     <item android:id="@+id/navdrawer_item_settings" 
      android:icon="@drawable/ic_drawer_settings" 
      android:title="@string/navdrawer_item_settings"/> 
     <item android:id="@+id/navdrawer_item_help" 
      android:icon="@drawable/ic_drawer_help" 
      android:title="@string/navdrawer_item_help"/> 
     <item android:id="@+id/navdrawer_item_about" 
      android:icon="@drawable/ic_drawer_about" 
      android:title="@string/navdrawer_item_about"/> 
    </group> 
</menu> 

ответ

67

просто применить следующую строку на style.xml

<item name="android:listDivider">your_color</item> 

ниже только информация для ваших знаний ... Если вы увидели библиотеку дизайна поддержки .. они используют следующую структуру для NavigationView seprator ..

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

    <View android:layout_width="match_parent" 
      android:layout_height="1dp" 
      android:background="?android:attr/listDivider"/> 

</FrameLayout> 

здесь, вы можете увидеть андроида: фон = «андроид: атр/listDivider» .. так что наслаждайтесь ... и вот мой вывод, который я изменить цвет на holo_blue enter image description here

+0

Любой способ сделать это программно? – ElYeante

+0

@ElYeante Нет, к сожалению, нет возможности сделать это программно ... может быть в будущей библиотеке, это придет .. – Moinkhan

+1

Отлично работает! Спасибо – Vinayak

1

Яса вы должны добавить пустой заголовок в качестве разделителя.

как

<group android:id="@+id/my_id"> 
    <!-- Divider will appear above this item --> 
    <item ... /> 
</group> 

original answer

+0

что мне нужно добавить в divider @RBK –

21

Вот лучший и простой способ, используя меню в целях

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    android:theme="@style/ThemeToolbar.NavigationView" 
    app:itemTextColor="@color/white" 
    app:itemIconTint="@color/white" 
    app:headerLayout="@layout/activity_home_nav_header" 
    app:menu="@menu/activity_home_drawer" /> 

ThemeToolbar.NavigatinoView

<style name="ThemeToolbar.NavigationView" > 
    <item name="android:listDivider">@color/white</item> 
    <item name="android:textColorSecondary">@color/white</item> 
</style> 

enter image description here

+0

Что такое ThemeToolbar.? – anivaler

+0

Это любое название темы приложения, здесь оно добавляется только к связанным с ним NavigationView с ThemeToolbar, написанным как ThemeToolbar.NavigationView. NavigationView может быть написана как сама. –

+2

это решение работает !! –

1

Perfeita resposta

enter image description here

<android.support.design.widget.NavigationView 
    android:id="@+id/activity_principal_nav_view" 
    android:layout_width="@dimen/size_230" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@color/black" 
    android:fitsSystemWindows="true" 
    app:insetForeground="@color/white" 
    app:menu="@menu/settings_menu" 
    app:itemTextColor="@color/white" 
    app:itemIconTint="@color/white" 
    app:headerLayout="@layout/settings_menu_header" 
    android:theme="@style/NavigationDrawerStyle"/> 
+0

, я попробовал, но не работал @George Freire –

1
<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:textColorPrimary">@color/menu_text_color</item> 
    <item name="android:textColorSecondary">@color/menu_text_color</item> 
</style> 

textColorPrimary меняет цвет заголовка.

Смежные вопросы