2016-06-03 35 views
10

Aşağıdaki kurulum var:Konumlandırma

<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üsü/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> 

düzen/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"/> 

stili:

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

bu aşağıdaki sonucu üretir:

screenshot

kabarcık stilin yerçekimi ayarı rağmen üst kısmında gösterilir.

Menü öğesinin ortasında actionLayout öğesini nasıl konumlandırabilirim?

cevap

18

Ben sorunu çözmek için başardı kazayla.

Ben bir kap içine TextView koymak zorunda:

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

Şimdi sayaç sağ menü öğesi ortasında gösterilir!


GÜNCELLEME

Sayaç değiştirme kodu: Sadece sağa (yuvarlak şekli) balonun içindeki metni taşımak, ancak

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

Programlamal olarak sayaç değeri eklerken, durumumda bir LinearLayout istisnası yayınlıyor. Kodunuz tarafından programatik olarak sayaç değerini nasıl ayarlayabilirim. – Mahmudul

+0

Bazı kodları ile uygun bir soru sorun – injecteer

+0

xml kodunuzu menu_counter.xml dosyasına ekledim, ancak program aracılığıyla sayaç değiştiremiyorum. Bilmiyorum, sadece TextView kullaniyorsam o zaman çalisir ama bir linelaylayiciyla sarmak için sayaç ayarlayamaz. Anladım? – Mahmudul

-1

aşağıda deneyin:

düzen/counter.xml kullanımı

android in: yerçekimi = "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

kabarcık kendisi üst kalır -aligned – injecteer

+0

@ injecteer. lütfen deneyin "android: layout_gravity" özelliği –

+0

Ben bile denedim android: layout_gravity = "alt" 'ama bir şey değiştirmedi – injecteer