2016-04-04 9 views
6

Czy istnieje sposób na zmniejszenie przestrzeni między ikoną i tekstem w NavigationView, gdy jest on zbudowany przy użyciu menu xml?Android NavigationView: zmniejszyć przestrzeń między ikoną a tekstem i "itemBackground" nie działa

Próbowałem napisać tekst android:drawablePadding używając atrybutu i to nie działa, próbowałem ustawić dopełnienie i marginesy i nic nie działa.

Ponadto, gdy ustawiam app:itemBackground i ustawię zaznaczony stan, cały element menu nie zostanie podświetlony, otrzymam obraz podobny do poniższego.

enter image description here

XML używany do tworzenia itemBackground jest:

<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> 

Każdy pomysł co może być grane? Wygląda na to, że element menu ma kolor tła, jednak menu xml jest dość standardowe.

NavigationView powrotem fioletowe tło na to ustawić z tematem:

<!--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> 

Używam Android support/projekt biblioteki 23.2.1.

+0

'Zmiana s .. Code' jest przedmiot lub nagłówek ? Jeśli jest to nagłówek, pokaż nam "@ layout/nav_header" –

+0

Wypróbuj ten link, aby uzyskać dostęp do tekstu dla każdego wiersza, a następnie możesz go dostosować. - http://stackoverflow.com/a/35313552/2128166 – androidnoobdev

+0

Udało mi się znaleźć resouce wymiaru w źródle i nadpisać go. Pozostaje tylko główny problem. – Ali

Odpowiedz

26

Po przeszukaniu źródła. Zauważyłem, że można zastąpić zasób wymiaru, aby to naprawić.

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

Strzeż się jednak, że to się zmieni zasób wymiar wszędzie! może także być w stanie skopiować plik układu i zastąpić że zamiast design_navigation_menu.xml

jak dla różnych krawędzi kolorów, ustawić app:itemBackground="@android:color/transparent" a następnie w temacie dla NavigationView set:

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

Ty może obsługiwać zarówno w temacie dla NavigationView następująco:

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

nav_drawer_item_selector.xml wygląda tak:

<?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

Dzięki za odpowiedź narzędzia: pomijanie sugestii z Twojej strony pomogło mi rozwiązać problem zmniejszania marginesów elementów w separatorach poprzez przesłonięcie 1dp, czy możesz uprzejmie zaznacz swoją odpowiedź jako zaakceptowaną. –

+0

@Ali Czy nadal masz działający przykład? Czy chcesz podzielić się nimi tutaj? 'selectableItemBackground' zabija dla mnie cały układ. Krawędzie powodują dopełnienie wewnątrz 'NawigacjaMenuItemView', a ustawienie' itemBackground' przezroczyste nie wydaje się nic dla mnie zrobić. – RobGThai

+0

Powyższy kod nadal działa dla mnie, różnica może być gdzie indziej. Spróbuj utworzyć pytanie na SO i podaj jak najwięcej szczegółów. – Ali

10

Wystarczy dodać ten wiersz w dimen.xml plików

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

ten wyściółka zastąpi od NavigationView

Powiązane problemy