Проблема TextAllcaps

Добрый день.

Я реализовал TabLayout с viewpager, когда текст заголовка вкладки в формате .ttf не работает.

Я сделал код стиля, но столкнулся с той же проблемой.

см. мой xml-код ->

 <android.support.design.widget.TabLayout
 android:id="@+id/tabs"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 style="@style/CustomTabLayout"
 android:background="#eceff1"
 app:tabMode="fixed"
 app:tabGravity="fill"/>    

код стиля ->

<style name="CustomTabLayout" parent="Widget.Design.TabLayout">
 <item name="tabIndicatorColor">@color/iconGray</item>
 <item name="tabIndicatorHeight">3dp</item>
 <item name="tabBackground">?attr/selectableItemBackground</item>
 <item name="tabTextAppearance">@style/CustomTabTextAppearance</item>
 <item name="tabSelectedTextColor">@color/colorPrimary</item>
</style>

<style name="CustomTabTextAppearance" parent="TextAppearance.Design.Tab">
 <item name="android:textSize">@dimen/txt_15</item>
 <item name="android:textColor">#a4dbb2</item>
 <item name="android:fontFamily">@font/amaranth</item>
 <item name="textAllCaps">true</item>
</style>

Я видел "вопросы, на которые, возможно, уже есть ваш ответ", но я не удовлетворен этими ответами

Заранее спасибо...


person Seema    schedule 02.05.2018    source источник
comment
stackoverflow.com/a/33015953/3395198   -  person IntelliJ Amiya    schedule 02.05.2018
comment
Да, но я хочу, чтобы шрифт .ttf или семейство шрифтов с textAllCaps были истинными на вкладках с viewpager   -  person Seema    schedule 02.05.2018


Ответы (1)


MyClass.java —

public class MyClass extends Application {

  @Override
  public void onCreate() {
    TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/Roboto-Regular.ttf"); // font from assets: "assets/fonts/Roboto-Regular.ttf
  }
}

темы.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
    <!-- you should set typeface which you want to override with TypefaceUtil -->
    <item name="android:typeface">serif</item>
  </style>
</resources>

TypefaceUtil.java —

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;

import java.lang.reflect.Field;

public class TypefaceUtil {

    /**
     * Using reflection to override default typeface
     * NOTICE: DO NOT FORGET TO SET TYPEFACE FOR APP THEME AS DEFAULT TYPEFACE WHICH WILL BE OVERRIDDEN
     * @param context to work with assets
     * @param defaultFontNameToOverride for example "monospace"
     * @param customFontFileNameInAssets file name of the font from assets
     */
    public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
        try {
            final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);

            final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
            defaultFontTypefaceField.setAccessible(true);
            defaultFontTypefaceField.set(null, customFontTypeface);
        } catch (Exception e) {
            Log.e("Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
        }
    }
}
person Dhanshri    schedule 02.05.2018
comment
Я использовал этот код --› CalligraphyConfig.initDefault( new CalligraphyConfig.Builder() .setDefaultFontPath(fonts/Amaranth-Regular.ttf) .setFontAttrId(R.attr.fontPath) .build() ); но этот код textAllCaps верен, когда шрифт .ttf не работает - person Seema; 02.05.2018