Как изменить шрифт ящика для навигации?

Я хочу использовать свой собственный шрифт для навигационного ящика в android.I использовать библиотеку поставляется с Android-студией в соответствии с этим ответом: https://stackoverflow.com/a/23632492/4393226 . Но я не знаю, как изменить шрифт и сделать его RTL. Я много искал, и я нашел, как сделать ящик RTL. Я использую этот код:

getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 

И Android – возможен ли навигационный ящик с правой стороны?

Но, как вы знаете, это работает только в API 17 и выше. Пожалуйста помоги! Как изменить шрифт меню? Как правильно настроить RTL?

Отредактировано : У моего шрифта «TTF» файл находится в свойствах / шрифтах, и я знаю, как его установить для textview с помощью java, но я не знаю, как установить его в меню ящика навигации.

Solutions Collecting From Web of "Как изменить шрифт ящика для навигации?"

Я нашел ответ: сначала создайте этот класс в своем проекте:

 import android.graphics.Paint; import android.graphics.Typeface; import android.text.TextPaint; import android.text.style.TypefaceSpan; public class CustomTypefaceSpan extends TypefaceSpan { private final Typeface newType; public CustomTypefaceSpan(String family, Typeface type) { super(family); newType = type; } @Override public void updateDrawState(TextPaint ds) { applyCustomTypeFace(ds, newType); } @Override public void updateMeasureState(TextPaint paint) { applyCustomTypeFace(paint, newType); } private static void applyCustomTypeFace(Paint paint, Typeface tf) { int oldStyle; Typeface old = paint.getTypeface(); if (old == null) { oldStyle = 0; } else { oldStyle = old.getStyle(); } int fake = oldStyle & ~tf.getStyle(); if ((fake & Typeface.BOLD) != 0) { paint.setFakeBoldText(true); } if ((fake & Typeface.ITALIC) != 0) { paint.setTextSkewX(-0.25f); } paint.setTypeface(tf); } } 

Затем добавьте этот метод в свою активность, чтобы изменить шрифт меню ящика навигации:

 private void applyFontToMenuItem(MenuItem mi) { Typeface font = Typeface.createFromAsset(getAssets(), "ds_digi_b.TTF"); SpannableString mNewTitle = new SpannableString(mi.getTitle()); mNewTitle.setSpan(new CustomTypefaceSpan("" , font), 0 , mNewTitle.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE); mi.setTitle(mNewTitle); } 

А затем добавьте вызов метода, который вы только что добавили в свою деятельность:

 navView = (NavigationView) findViewById(R.id.navView); Menu m = navView.getMenu(); for (int i=0;i<m.size();i++) { MenuItem mi = m.getItem(i); //for aapplying a font to subMenu ... SubMenu subMenu = mi.getSubMenu(); if (subMenu!=null && subMenu.size() >0 ) { for (int j=0; j <subMenu.size();j++) { MenuItem subMenuItem = subMenu.getItem(j); applyFontToMenuItem(subMenuItem); } } //the method we have create in activity applyFontToMenuItem(mi); } 
 **It Works For Fonts Only** 1.First Of All Add color of your font (if you want to change) in colors.xml file located at res->values->colors.xml like <color name="black">#000000</color> // it's for black don't go for white color 2.Then edit style.xml file located at same values directory (there are two files edit that file which having your theme with style name="your_theme" or find line <!-- Customize your theme here. --> in that two file) 3.Here we have to set font property. So you have to create new style tag in enclosing resource tags. in my case I create <style name="MyText" parent="@android:style/TextAppearance.Medium"> <item name="android:textSize">20sp</item> //size of font <item name="android:textColor">@color/black</item> //color of font <item name="android:typeface">sans</item> // type how it appear </style> Note that Name given for this tag is MyText. Now we have to use this name in aboved first style block whose name is your appication theme. 4. Mentioned this new style in above appication theme style tag. In my case its like <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:textViewStyle">@style/MyText</item> //MyText its custom style for font </style> 

Спасибо! Я успешно изменил шрифт в навигационном ящике на основе сообщения @Amir H, но с конфигурацией (просто добавьте несколько строк в свою активность)

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); Menu m = navigationView .getMenu(); for (int i=0;i<m.size();i++) { MenuItem mi = m.getItem(i); //for applying a font to subMenu ... SubMenu subMenu = mi.getSubMenu(); if (subMenu!=null && subMenu.size() >0 ) { for (int j=0; j <subMenu.size();j++) { MenuItem subMenuItem = subMenu.getItem(j); SpannableString s = new SpannableString(subMenuItem.getTitle()); s.setSpan(new TypefaceSpan("fonts/yourfontname.ttf"), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); subMenuItem.setTitle(s); } } } 

Может быть, это поможет кому-то 🙂