web-dev-qa-db-ja.com

ナビゲーションドロワーでの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"/>

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

スタイル:

<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をメニュー項目の中央に配置するにはどうすればよいですか?

15
injecteer

私は偶然に問題を解決することができた。

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>

これで、メニュー項目の真ん中にカウンターが表示されます!


[〜#〜]更新[〜#〜]

カウンター変更コード:

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