2016-02-10 76 views
6

我使用代碼來自定義導航視圖中文本和行高的高度,它適用於api21 +,但相同的代碼不適用於api 16.我如何使它工作?導航視圖中的自定義菜單項大小和文本大小

代碼:

創建樣式和使用app:theme

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

它應用到NavigationView,然後使用應用這種風格適用於NavigationView:主題

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


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

注意給別人RES /值-V16目錄:這個問題已經在這裏找到答案http://stackoverflow.com/問題/ 35453698/listpreferreditemheightsmall-is-not-working-on-api-16 – CKP78

回答

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); 
      } 

     } 
    }); 
+0

如何更改導航視圖中兩個菜單項之間的文本大小和距離? – jason

+0

@jason你正在獲取文本視圖,現在你可以調用setTextsize和setpadding方法。 – androidnoobdev

0

檢查RES /值目錄,你會發現,實現了不同風格

+0

我喜歡vlaues,values-w820dp和values-v21。我應該刪除一些東西嗎? – jason