Android NavigationView с внутренним интервалом

В настоящее время я разрабатываю приложение для Android с поддержкой NavigationView. У меня есть вопрос, чтобы сделать это так, как я хочу: (1) я хочу разделить элементы навигации на две области: одну вверху под заголовком и одну внизу. (2) Я хочу удалить отступ между разделителем и элементом под ним.

Как это выглядит и как должно выглядеть: Как это выглядит и как должно выглядеть

Я знаю, что есть способ переопределить значение заполнения, которое исправит (2). Но это кажется немного грязным, и, возможно, есть другой подход для достижения обоих этих целей. Моя идея заключалась в том, чтобы получить элемент «Настройки» и программно изменить его макет, но пока я не нашел способа заставить это работать. Или мне действительно нужно построить нижний колонтитул самостоятельно?

Кроме того, я не совсем уверен, какие модные словечки мне следует гуглить. Может быть, там уже есть простой ответ.

Мой текущий код. Сейчас внутри Activity нет изменений макета, поэтому я его не добавлял.

Activity_main.xml:

<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".main.MainActivity">

    <!-- The content -->
    <LinearLayout>...</LinearLayout>

    <!-- The navigation drawer -->
    <android.support.design.widget.NavigationView
        android:id="@+id/main_navigationview"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/white"
        app:headerLayout="@layout/mainnav_header"
        app:itemBackground="@drawable/menu_background"
        app:itemIconTint="@color/menu_text"
        app:itemTextColor="@color/menu_text"
        app:menu="@menu/maindrawer">

    </android.support.design.widget.NavigationView>

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

меню.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<group android:id="@+id/main_drawer_menu1" android:checkableBehavior="single">
    <item
        android:id="@+id/main_navigationview_request"
        android:checkable="false"
        android:enabled="false"
        android:icon="@drawable/ic_navigationdrawer_request"
        android:title="@string/main_navigation_request"
        app:actionLayout="@layout/menuitem_default" />
    <item
        android:id="@+id/main_navigationview_invitations"
        android:checked="true"
        android:icon="@drawable/ic_navigationdrawer_invitations"
        android:title="@string/main_navigation_invitations"
        app:actionLayout="@layout/menuitem_default" />
    <item
        android:id="@+id/main_navigationview_prev"
        android:icon="@drawable/ic_navigationdrawer_previous"
        android:title="@string/main_navigation_previnvites"
        app:actionLayout="@layout/menuitem_default" />
    <item
        android:id="@+id/main_navigationview_info"
        android:icon="@drawable/ic_navigationdrawer_info"
        android:title="@string/main_navigation_info"
        app:actionLayout="@layout/menuitem_default" />
</group>
<group android:id="@+id/main_drawer_menu2" android:checkableBehavior="single">
    <item
        android:id="@+id/main_navigationview_settings"
        android:checked="true"
        android:icon="@drawable/ic_navigationdrawer_settings"
        android:title="@string/main_navigation_settings"
        app:actionLayout="@layout/menuitem_default" />
    <item
        android:id="@+id/main_navigationview_logout"
        android:icon="@drawable/ic_navigationdrawer_logout"
        android:title="@string/main_navigation_logout"

        app:actionLayout="@layout/menuitem_caution" />
</group>


person gtRfnkN    schedule 06.07.2016    source источник
comment
можно ваш код??   -  person Janki Gadhiya    schedule 06.07.2016
comment
конечно извините. В настоящее время это только те 2 файла xml. Никакие изменения макета не выполняются внутри активности   -  person gtRfnkN    schedule 06.07.2016
comment
Мне больше нравится тот, что справа, но это не та проблема, которую я хочу обсудить. Я просто хочу найти способ сделать макет похожим на тот, что справа.   -  person gtRfnkN    schedule 06.07.2016
comment
невозможно..!! с ящиком навигации по умолчанию вы можете создать собственный .. !!   -  person Janki Gadhiya    schedule 06.07.2016
comment
Проверьте этот ответ: stackoverflow.com/a/30611068/1971522 и весь вопрос там. Он предполагает использование вложенного макета внутри NavigationView. Это довольно грязный подход, но он позволяет добиться желаемого эффекта.   -  person Artem    schedule 06.07.2016
comment
NavigationView имеет собственную реализацию презентатора меню. Он не подключаемый/заменяемый и не очень гибкий. Я рекомендую вам просто написать свой собственный макет и забыть о NavigationView.   -  person kris larson    schedule 06.07.2016
comment
В итоге я создал собственное представление для этой панели навигации с двумя отдельными списками ListView. Не мое любимое решение, но пока сойдет. Если есть какое-то новое/лучшее решение, я хотел бы его услышать.   -  person gtRfnkN    schedule 25.07.2016


Ответы (1)


Эта строка удаляет отступы между иконкой и текстом.

добавьте только строку ниже в файл dimen.xml

<dimen tools:override="true" name="design_navigation_icon_padding">10dp</dimen>
person Ankur Bavishi    schedule 17.06.2017