导航视图中自定义菜单项大小和文本大小

6

我正在使用代码自定义导航视图中文本和行高的高度,在api21+上有效,但在api16上相同的代码不起作用。如何让它工作?

代码:

创建一个样式并使用app:theme将其应用于NavigationView

<style name="NavigationViewStyle">
     <item name="android:textSize">20sp</item> <!-- menu item text size-->
     <item name="android:listPreferredItemHeightSmall">40dp</item><!-- menu item height-->
</style>

然后,使用app:theme将此样式应用于NavigationView

<android.support.design.widget.NavigationView
       ...
       ...    
        app:theme="@style/NavigationViewStyle"
       ...
       ...


</android.support.design.widget.NavigationView>

提示他人:此问题已在 http://stackoverflow.com/questions/35453698/listpreferreditemheightsmall-is-not-working-on-api-16 得到解答。 - CKP78
2个回答

7
在代码中,您可以使用以下代码自定义文本视图。请尝试并让我知道。
private final ArrayList<View> mMenuItems = new ArrayList<>();
    final Menu navMenu = navigationView.getMenu();
    // Install an OnGlobalLayoutListener and wait for the NavigationMenu to fully initialize
    navigationView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            // Remember to remove the installed OnGlobalLayoutListener
            navigationView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            // Loop through and find each MenuItem View
            for (int i = 0; i < navMenu.size(); i++) {
                final String id = "nav_menuItem" + (i);
                final MenuItem item = navMenu.findItem(getResources().getIdentifier(id, "id", getPackageName()));
                navigationView.findViewsWithText(mMenuItems, item.getTitle(), View.FIND_VIEWS_WITH_TEXT);
            }
            // Loop through each MenuItem View and apply your custom Typeface

            for (final View menuItem : mMenuItems) {
                ((TextView) menuItem).setTypeface(fontLight, Typeface.NORMAL);
            }

        }
    });

我如何在导航视图中更改文本大小和两个菜单项之间的距离? - jason
@jason,你现在已经获取到了TextView,可以对其调用setTextSize和setPadding方法。 - Wasim K. Memon

0
请检查您的res/values目录,您可能会发现一个实现了不同样式的res/values-v16目录。

我有values、values-w820dp和values-v21,我应该删除什么吗? - jason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接