How to change Custom Font of Android Menu Item?

前端 未结 10 2019
夕颜
夕颜 2020-12-05 02:17

I have the following Android Java and XML code. I want to change the font of Menu Items of my app. I know only that we can change the font of TextView using setTypeface but

10条回答
  •  我在风中等你
    2020-12-05 03:04

    If your app only needs to work on Android Pie (API level 28) and above you can construct a TypefaceSpan from a Typeface in onPrepareOptionsMenu. Otherwise you can use a CustomTypefaceSpan class like this answer suggests:

    public boolean onPrepareOptionsMenu(Menu menu) {
        int customFontId = R.font.metropolis_medium;
        for (int i = 0; i < menu.size(); i++) {
            MenuItem menuItem = menu.getItem(i);
            String menuTitle = menuItem.getTitle().toString();
            Typeface typeface = ResourcesCompat.getFont(this, customFontId);
            SpannableString spannableString = new SpannableString(menuTitle);
            // For demonstration purposes only, if you need to support < API 28 just use the CustomTypefaceSpan class only.
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
                TypefaceSpan typefaceSpan = typeface != null ?
                        new TypefaceSpan(typeface) :
                        new TypefaceSpan("sans-serif");
                spannableString.setSpan(typefaceSpan, 0, menuTitle.length(), 
                        Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
            } else {
                CustomTypefaceSpan customTypefaceSpan = typeface != null ?
                        new CustomTypefaceSpan(typeface) :
                        new CustomTypefaceSpan(Typeface.defaultFromStyle(Typeface.NORMAL));
                spannableString.setSpan(customTypefaceSpan, 0, menuTitle.length(),
                        Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
            }
            menuItem.setTitle(spannableString);
        }
        return true;
    }
    

    main.menu.xml:

    
    
        
        
    
    

    Before & After:

    Before & After

提交回复
热议问题