2016-06-03 24 views
10

Ho la seguente configurazione:posizionamento di actionLayout nel cassetto navigazione

<android.support.design.widget.NavigationView 
    style="@style/NavigationView" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:itemTextAppearance="@style/DrawerTextAppearance" 
    app:menu="@menu/drawer"/> 

menù/drawer.xml

<menu>  
    <item 
     android:id="@+id/messages_item" 
     android:icon="@drawable/ic_notifications_neg" 
     app:actionLayout="@layout/counter" 
     android:title="@string/message_center"/> 

    <item 
     android:id="@+id/search_item" 
     android:icon="@drawable/ic_search_neg" 
     android:title="@string/search"/> 
</menu> 

layout/counter.xml

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="26dp" 
    android:layout_height="26dp" 
    android:text="55" 
    style="@style/Bubble"/> 

stile:

<style name="Bubble" parent="android:Widget.TextView"> 
    <item name="android:gravity">center</item> 
    <item name="android:layout_gravity">center_vertical</item> 
    <item name="android:textColor">@android:color/white</item> 
    <item name="android:background">@drawable/bubble</item> 
</style> 

Questo produce il seguente risultato:

screenshot

la bolla è mostrato in alto nonostante l'impostazione gravità di stile.

Come si può posizionare l'actionLayout nel mezzo di una voce di menu?

risposta

18

sono riuscito a risolvere il problema per errore.

ho dovuto mettere il TextView all'interno di un contenitore:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/counterView" 
     style="@style/Bubble" 
     android:layout_width="26dp" 
     android:layout_height="26dp" 
     android:text="55"/> 
</LinearLayout> 

Ora il contatore viene mostrata proprio nel bel mezzo della voce di menu!


UPDATE

contatore codice cambiando:

TextView view = (TextView) drawer.getMenu().findItem(R.id.counter_item).getActionView().findViewById(R.id.counterView); 
view.setText("" + count); 
+0

Esegue il casting di un'eccezione LinearLayout nel mio caso, quando si aggiunge il valore del contatore a livello di codice. Come posso impostare il valore del contatore a livello di codice dal tuo codice. – Mahmudul

+0

porre una domanda corretta con del codice – injecteer

+0

Ho aggiunto il codice xml in menu_counter.xml, ma non posso cambiare il contatore a livello di codice. Non lo so, se uso solo TextView allora funziona, ma quando lo si avvolge in un output lineare non può essere impostato come contatore. Fatto? – Mahmudul

-1

Prova di seguito:

In layout/counter.xml uso

Android: la gravità = "right | center_vertical"

<TextView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="26dp" 
android:layout_height="26dp" 
android:text="55" 
android:gravity="right|center_vertical" 
style="@style/Bubble"/> 
+0

che sposterà solo il testo all'interno della bolla (che è una forma rotonda) a destra, ma la bolla stessa rimane alto -allineato – injecteer

+0

@injecteer. per favore prova la proprietà "android: layout_gravity" –

+0

Ho provato anche 'android: layout_gravity =" bottom "' ma non ha cambiato nulla – injecteer

Problemi correlati