Элемент навигационного ящика не занимает правильное поле с левой стороны

Я использую макет ящика для дизайна материалов Android. Все работает отлично. Но я получаю небольшую проблему с отступом элемента макета ящика, оставленным в рычаге Android API ‹ = 19.

Он хорошо работает на уровне Android API >= 21. Посмотрите на скриншот:

введите здесь описание изображения

Но на уровне Android API ‹= 19 элементы макета ящика не имеют надлежащего отступа с левой стороны. Посмотрите на скриншот:

введите здесь описание изображения

Мои xml-файлы выглядят следующим образом:

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:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"
style="@style/styleActivity">

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer"


    android:background="@drawable/graphics_drawer_bg"
    app:itemTextColor="@color/white_light"
    app:itemBackground="@drawable/graphics_item_bg"
    app:itemIconTint="@color/white_light"
    />

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

activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<group
    android:id="@+id/nav_top"
    android:checkableBehavior="single">
    <item
        android:id="@+id/nav_routine"
        android:icon="@drawable/ic_access_time_accent_24dp"
        android:title="Routines" />
    <item
        android:id="@+id/nav_class"
        android:icon="@drawable/ic_book_accent_24dp"
        android:title="Classes" />
    <item
        android:id="@+id/nav_exam"
        android:icon="@drawable/ic_local_library_black_24dp"
        android:title="Exams" />
    <item
        android:id="@+id/nav_event"
        android:icon="@drawable/ic_date_range_black_24dp"
        android:title="Events" />
    <item
        android:id="@+id/nav_statistics"
        android:icon="@drawable/ic_insert_chart_black_24dp"
        android:title="Statistics" />
</group>

<group
    android:id="@+id/nav_bottom"
    android:checkableBehavior="single">
    <item
        android:id="@+id/nav_settings"
        android:icon="@drawable/ic_settings_black_24dp"
        android:title="Settings" />
    <item
        android:id="@+id/nav_help"
        android:icon="@drawable/ic_help_outline_black_24dp"
        android:title="Help" />
</group>

</menu>

Заранее спасибо.


person Tariq    schedule 07.09.2016    source источник


Ответы (4)


Попробуйте добавить отступы в android.support.design.widget.NavigationView.

Например:

<android.support.design.widget.NavigationView
    ...
    android:padding="10dp"
    ...
/>

Как вы упомянули в комментарии, вы хотите добавлять отступы только на устройствах с API ‹= 19. Для этого создайте две папки в каталоге res.

values-v11 и values-v21

В эти папки добавьте файл dimens.xml и в нем добавьте измерение для NavigationView.

In dimens.xml of values-v11:

<dimen name="padding_left">10dp</dimen>

In dimens.xml of values-v21:

No padding for API >= 21
<dimen name="padding_left">0dp</dimen>

И, наконец, в NavigationView выглядит так:

<android.support.design.widget.NavigationView
        ...
        android:paddingLeft="@dimen/padding_left"
        android:paddingStart="@dimen/padding_left"
        ...
    />

Обновлять:

В материальном дизайне поля и отступы предопределены, но вы можете переопределить эти значения.

<dimen name="design_navigation_padding_top_default" tools:override="true">0dp</dimen>
<dimen name="design_navigation_separator_vertical_padding" tools:override="true">0dp</dimen>
<dimen name="design_navigation_padding_bottom" tools:override="true">0dp</dimen>

Я нашел это здесь

person Faraz    schedule 07.09.2016
comment
Требуется заполнение всей области навигационного ящика, включая часть заголовка. И занимает больше заполнения на уровне API ›=21. Но мне нужно предоставить отступы только для элементов макета ящика, и это должен быть уровень API ‹= 19. - person Tariq; 07.09.2016
comment
Это здорово, но вы знаете, что у каждого элемента есть фон, например app:itemBackground=@drawable/graphics_item_bg. Итак, когда я помещаю фон в NavigationView, я вижу пустое пространство слева без фона. На самом деле, мне нужно предоставить некоторые отступы для элементов навигационного ящика. Возможно ли это через java-код из активности или что-то в этом роде? - person Tariq; 07.09.2016
comment
@Tariq Если все элементы имеют одинаковый цвет, установите цвет в самом NavigationView, а не в каждом элементе. - person Faraz; 07.09.2016
comment
Как видите, у каждого элемента есть фоновое изображение, взятое из @drawable/graphics_item_bg.xml. - person Tariq; 07.09.2016
comment
Есть ли способ предоставить отступы/поля непосредственно элементам макета навигационного dwrawer? - person Tariq; 07.09.2016

Это сработало для меня

Просто добавьте эту строку в файл dimen.xml.

 <dimen tools:override="true" name="design_navigation_icon_padding">10dp</dimen>

эта строка переопределяет заполнение элемента меню навигации.

person Ankur Bavishi    schedule 17.06.2017

person    schedule
comment
Вы знаете, что я использую пункт меню следующим образом: - person Tariq; 07.09.2016
comment
И он не поддерживает ‹TextView... /› - person Tariq; 07.09.2016

person    schedule
comment
Вы можете взять все предметы в одной группе. - person Parveen Prajapati; 07.09.2016
comment
На самом деле, я должен отображать их в двух разных группах. Потому что мне нужно дополнительное пространство между двумя группами. - person Tariq; 07.09.2016