2016-04-04 10 views
6

C'è un modo per ridurre lo spazio tra l'icona e il testo in NavigationView quando è stato creato utilizzando un menu xml?Android NavigationView: riduce lo spazio tra icona e testo e `itemBackground` non funziona

Ho provato a digitare android:drawablePadding utilizzando l'attributo app:itemTextAppearance e che non funziona, ho provato a impostare padding e margini e non funziona nulla.

Inoltre, quando si imposta app:itemBackground e si imposta lo stato controllato, l'intera voce di menu non evidenzia, ottengo qualcosa come l'immagine qui sotto.

enter image description here

L'XML utilizzato per creare il 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> 

Qualsiasi idea di quello che potrebbe essere in corso? Chiaramente sembra che ci sia un colore di sfondo sulla voce del menu, tuttavia il menu xml è piuttosto standard di serie.

Il NavigationView indietro sfondo viola su di esso impostato da un tema:

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

che sto usando la libreria Android supporto/design 23.2.1.

+0

'Change sec .. Codice delle è articolo o intestazione ? Se è l'intestazione, mostraci '@ layout/nav_header' –

+0

Prova questo link che ti permetterà di ottenere una vista testuale per ogni riga in modo da poterla personalizzare. - http://stackoverflow.com/a/35313552/2128166 – androidnoobdev

+0

Sono riuscito a trovare la dimensione resauce nell'origine e sovrascriverlo. Rimane solo il problema di evidenziazione. – Ali

risposta

26

Dopo aver scavato la fonte. Ho scoperto che è possibile sovrascrivere una risorsa di dimensione per risolvere il problema.

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

Attenzione però che questo cambierà la risorsa dimensione in tutto il mondo! Si può anche essere in grado di copiare il file di layout e ignorare che invece design_navigation_menu.xml

Per quanto riguarda i diversi bordi di colore, ho impostato app:itemBackground="@android:color/transparent" e poi nel tema della NavigationView set:

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

È in grado di gestire sia nel tema per il vostro NavigationView come segue:

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

nav_drawer_item_selector.xml assomiglia così:

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

Grazie per la risposta gli strumenti: suggerimento di override dalla tua parte mi ha aiutato a risolvere il problema della riduzione del margine degli elementi all'interno dei separatori sovrascrivendo 1dp, puoi contrassegna gentilmente la tua risposta come accettata. –

+0

@Ali Hai ancora l'esempio di lavoro? Ti dispiace condividerli qui. 'selectableItemBackground' uccide l'intero layout per me. I bordi causano il riempimento all'interno di 'NavigationMenuItemView' e l'impostazione' itemBackground' trasparente non sembra fare nulla per me. – RobGThai

+0

Il codice sopra, funziona ancora per me, la differenza potrebbe essere altrove. Prova a creare una domanda su SO e fornisci il maggior numero di dettagli possibile. – Ali

10

Basta aggiungere questa linea in dimen.xml file di

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

questo avrà la precedenza imbottitura di NavigationView

Problemi correlati