Пользовательские шрифты androidx на нижнем API

Я использую AndroidX в своем приложении Kotlin и пытаюсь добавить собственные шрифты. У меня есть папка в res / font с файлами .ttf и 2 семействами шрифтов (v26 и normal). v26 содержит префиксы android:, а другой файл имеет префиксы app :.

Я также добавил реализации appcompat и legacy-support в gradle, но почему-то все еще не могу заставить шрифт правильно отображаться на Android 6.0 (работает на новых устройствах). Я устанавливаю семейство шрифтов в AppTheme как:

    <item name = "fontFamily">@font/avalon</item>

Понятия не имею, что еще можно попробовать. У кого-нибудь была такая же проблема?

0
0
387
1

Ответы 1

Я думаю, что вы не можете использовать fontFamily для пользовательских шрифтов в старых API.

Однако вы можете создать свой собственный TextView (расширить стандартный) и установить собственный шрифт:

public class MyTextView extends TextView {

public MyTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

public MyTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public MyTextView(Context context) {
    super(context);
    init();
}

private void init() {
    if (!isInEditMode()) {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/custom.ttf");
        setTypeface(tf);
    }
}

}

Или установить такой шрифт:

Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/custom.ttf");
myTextView.setTypeface(typeface);

И есть ли способ установить глобальный шрифт с кодом?

Jakub Wisniewski 15.10.2018 13:34

По моему опыту, вы должны создавать собственные компоненты с настраиваемыми шрифтами - custom editText, textView и т. д. Кроме того, вы можете использовать настраиваемые атрибуты для установки настраиваемого шрифта из XML, чтобы вы могли указать шрифт и прочитать его в настраиваемых TextView и setTypeface.

vanste25 15.10.2018 13:36

У меня есть собственные стили для компонентов с настраиваемым шрифтом, но он по-прежнему работает только для новых API, несмотря на использование совместимости приложений. Но сейчас я попробую собственный класс для элемента.

Jakub Wisniewski 15.10.2018 13:37

Какую версию appCompat вы используете? Попробуйте реализовать com.android.support:appcompat-v7:26.1.0

vanste25 15.10.2018 13:39

реализация 'androidx.appcompat: appcompat: 1.0.0' Я использую androidx appcompat (так как я использую android x во всем приложении)

Jakub Wisniewski 15.10.2018 13:40

Попробуйте использовать обычную совместимость приложений и посмотрите, работает ли она. Эта версия у меня работает на 100%.

vanste25 15.10.2018 13:42

Также убедитесь, что вы используете AppCompatActivity и android.support.v7.widget.AppCompatTextView.

vanste25 15.10.2018 13:46

Другие вопросы по теме