Android: 更改子菜单父文本大小

Android: change submenu parent text size

我的导航视图有这个菜单结构:

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">

    <item
        android:id="@+id/nav_clients"
        android:icon="@drawable/ic_group"
        android:title="@string/nav_clients"/>

    <item
        android:id="@+id/nav_products"
        android:icon="@drawable/ic_box"
        android:title="@string/nav_products" />

    <item
        android:id="@+id/nav_orders"
        android:icon="@drawable/ic_buy"
        android:title="@string/nav_orders" />

</group>

<item android:title="@string/nav_title_app">
    <menu>
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings_black"
            android:title="@string/nav_settings" />

        <item
            android:id="@+id/nav_sync"
            android:icon="@drawable/ic_sync_black"
            android:title="@string/nav_sync" />
    </menu>
</item>

我已经成功更改了菜单项的文本大小,但只有包含菜单的项没有更改大小? 有什么想法吗?

我还没有找到任何正式的方法,也不是通过样式,但是您可以通过编程方式实现它,请看下面。

private void setMenuHeadTitleSize(int itemId) {

    Menu menu = mNavigationView.getMenu();

    MenuItem menuItem = menu.findItem(itemId);

    MenuItem subMenuItem = menuItem.getSubMenu().getItem();
    String title = String.valueOf(subMenuItem.getTitle());

    SpannableString mNewTitle = new SpannableString(title);
    mNewTitle.setSpan(new RelativeSizeSpan(1.1f), 0, title.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    subMenuItem.setTitle(mNewTitle);
}

同时为您的子菜单项提供一个 ID

<item android:id="@+id/nav_top"
    android:title="@string/nav_title_app">
    <menu>
        <item
            android:id="@+id/nav_settings"
            android:icon="@drawable/ic_settings_black"
            android:title="@string/nav_settings" />

        <item
            android:id="@+id/nav_sync"
            android:icon="@drawable/ic_sync_black"
            android:title="@string/nav_sync" />
    </menu>
</item>

最后,一旦 NavigationView 膨胀并附加菜单,调用上面的函数

setMenuHeadTitleSize(R.id.nav_top);