2016-04-04 6 views
6

Есть ли способ уменьшить пространство между значком и текстом в NavigationView при его создании с помощью меню xml?Android NavigationView: сокращение пробела между значком и текстом, а `itemBackground` не работает

Я пробовал текст android:drawablePadding с использованием атрибута app:itemTextAppearance, и это не сработало, я пробовал устанавливать прописку и поля и ничего не работает.

Кроме того, когда я установил app:itemBackground и установил проверенное состояние, весь пункт меню не выделяется, я получаю что-то вроде изображения ниже.

enter image description here

XML-используемый для создания itemBackground является:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_checked="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_focused="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_activated="true" android:drawable="@color/white_alpha_10" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 

Любая идея, что может быть происходит? Очевидно, что в элементе меню есть цвет фона, однако меню xml является довольно стандартным.

NavigationView назад фиолетовый фон на нем установлен от темы:

<!--Activity xml --> 
<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:layout_gravity="start" 
    app:theme="@style/AppTheme.NavigationView" 
    app:menu="@menu/menu_nav_drawer" 
    app:itemBackground="@drawable/nav_drawer_item" 
    app:headerLayout="@layout/nav_header"/> 

<!-- styles.xml --> 
<style name="AppTheme.NavigationView" parent="Widget.Design.NavigationView"> 
    <item name="android:background">@color/charcoal_new</item> 
    <item name="itemIconTint">@color/nav_drawer_icon</item> 
    <item name="android:listDivider">@color/dusk_alpha_50</item> 
    <item name="itemTextAppearance">@style/NavigationViewTextAppearance</item> 
</style> 

<style name="NavigationViewTextAppearance" parent="TextAppearance.Body.Regular"> 
    <item name="android:textColor">@color/white</item> 
    <item name="android:padding">0dp</item> 
    <item name="android:layout_margin">0dp</item> 
</style> 

Я использую Android поддержки/дизайн библиотеки 23.2.1.

+0

'Изменить сек .. Code' есть пункт или заголовок ? Если это заголовок показать нам '@ layout/nav_header' –

+0

Попробуйте эту ссылку, это позволит вам получить текстовое представление для каждой строки, чтобы вы могли его настроить. - http://stackoverflow.com/a/35313552/2128166 – androidnoobdev

+0

Мне удалось найти измерение размера в источнике и переопределить его. Остается только проблема с подсветкой. – Ali

ответ

26

После рытья через источник. Я обнаружил, что вы можете переопределить ресурс измерения, чтобы исправить это.

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

Остерегайтесь, однако, что это изменит размер ресурса везде! Вы также можете быть в состоянии скопировать файл макета и переопределить вместо design_navigation_menu.xml

Как для различных цветовых краев, я поставил app:itemBackground="@android:color/transparent", а затем в теме для NavigationView набор:

<item name="selectableItemBackground">@drawable/nav_drawer_item_selector</item>

Вы может работать как в теме для NavigationView следующим образом:

<item name="selectableItemBackground">@drawable/nav_drawer_item_selector</item> 
    <item name="itemBackground">@color/transparent</item> 

nav_drawer_item_selector.xml выглядит так:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_checked="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_focused="true" android:drawable="@color/white_alpha_10" /> 
    <item android:state_activated="true" android:drawable="@color/white_alpha_10" /> 
    <item android:drawable="@color/transparent" /> 
</selector> 
+1

Спасибо за ответ, что инструменты: переопределить предложение с вашей стороны помогло мне устранить проблему уменьшения края элементов внутри разделителей, переопределив 1dp, можете ли вы любезно отмечайте свой ответ как принятый. –

+0

@ У вас еще есть рабочий пример? Вы не разделяете их здесь. 'selectableItemBackground' убивает весь макет для меня. Края, вызванные заполнением внутри 'NavigationMenuItemView' и установка прозрачности' itemBackground', как представляется, ничего не делают для меня. – RobGThai

+0

Код выше, все еще работает для меня, разница может быть где-то еще. Попробуйте создать вопрос о SO и предоставить как можно больше деталей. – Ali

10

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

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

это перекроет прокладка NavigationView