2016-06-03 2 views
10

У меня есть следующие настройки:Позиционирование actionLayout в навигационном ящике

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

меню/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> 

макет/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"/> 

стиль:

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

это приводит к следующему результату:

screenshot

пузырь показан в верхней части, несмотря на настройки гравитации стиля в.

Как я могу позиционировать actionLayout в середине элемента меню?

ответ

18

мне удалось решить эту проблему случайно.

я должен был поставить TextView внутри контейнера:

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

Теперь счетчик показан прямо в середине этого пункта меню!


UPDATE

Счетчик изменения кода:

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

Это литье исключение LinearLayout в моем случае при добавлении значения счетчика программно. Как я могу установить значение счетчика программным путем вашим кодом. – Mahmudul

+0

задайте правильный вопрос с кодом – injecteer

+0

Я добавил ваш xml-код в menu_counter.xml, но не могу программно изменить счетчик. Я не знаю, если я использую только TextView, тогда он работает, но когда вы переносите его в linearlayout, он не может установить счетчик. Понял? – Mahmudul

-1

Попробуйте ниже:

В макете/counter.xml использования

андроида: гравитация = "правый | 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

, который будет двигаться только текст внутри пузыря (который является круглая форма) вправо, а сам пузырь остается сверху -aligned – injecteer

+0

@ injecteer. пожалуйста, попробуйте свойство «android: layout_gravity» –

+0

Я пробовал даже «android: layout_gravity =« bottom », но ничего не изменил – injecteer