Внешний шрифт Android для полного приложения
Я хочу изменить шрифт моего полного приложения! Но я не знаю, как получить доступ ко всему приложению. У меня есть способ доступа к тексту по Id, как я могу изменить код для доступа ко всему приложению?
public class ExternalFont extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String fontPath = "fonts/FreeUniversal-Regular.ttf";
TextView txtUniversal = (TextView) findViewById(R.id.universal);
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
txtUniversal.setTypeface(tf);
}
}
4 ответа
Чтобы изменить шрифт для всего TextView в приложении, вы должны создать собственный стиль, а затем добавить его в стиль AppTheme.
`<style name="customTextVeiw" parent="Widget.MaterialComponents.TextView">
<item name"fontFamilt">@font/custom_free_universal_regular</item>`
затем добавьте этот стиль в файл style.xml внутри стиля AppTheme.
`<style name="AppTheme" parent="AppBaseTheme">
<item name="android:textViewStyle">@style/customTextVeiw</item>`
Чтобы использовать шрифт для всего текста приложения, вы должны использовать функцию «Шрифты в XML» на устройствах под управлением Android 4.1 (уровень API 16) и выше. Чтобы добавить шрифты в качестве ресурсов, выполните следующие действия в Android Studio:
- Щелкните правой кнопкой мыши папку res и выберите «Создать»> «Каталог ресурсов Android». Откроется окно «Новый каталог ресурсов».
- В списке Тип ресурса выберите шрифт и нажмите кнопку ОК.
- Добавьте файлы шрифтов в папку шрифтов, например, этот free_universal_regular.ttf, вы должны начинать свой шрифт с меньшим и меньшим счетом вместо -.
Создание семейства шрифтов
Щелкните правой кнопкой мыши папку шрифтов и выберите «Создать»> «Файл ресурсов шрифта». Откроется окно «Новый файл ресурсов».
Введите имя файла, например: custom_free_universal_regular.xml, а затем нажмите OK. В редакторе откроется новый ресурс шрифта XML.
добавьте это в файл custom_free_universal_regular.xml.
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/free_universal_regular" /> </font-family>
Теперь мы можем использовать это семейство шрифтов в любом месте нашего приложения, например, например, для всех приложений используйте его внутри style.xml.
<style name="BaseTheme" parent=""> <item name="fontFamily">@font/custom_free_universal_regular</item>
или в конкретном элементе используйте его так
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/custom_free_universal_regular"/>
Надеюсь, это могло помочь.
К сожалению, не существует прямого способа, которым вы можете изменить гарнитуру всех TextViews, которые вы используете в своем приложении, просто изменив гарнитуру по умолчанию.
Что вы можете сделать, так это создать свой собственный TextView и установить на нем шрифт, как это предлагает #jposedlujan. Но недостаток в этом подходе состоит в том, что каждый раз, когда будет создаваться объект TextView, будет создаваться новый объект Typeface, что крайне плохо для использования ОЗУ (объект Typeface обычно варьируется от 8-13 КБ для гарнитур, таких как Roboto). Поэтому лучше кэшировать ваш шрифт, как только он загрузится.
Шаг 1. Создайте кэш шрифтов для своего приложения.
public enum Font {
// path to your font asset
Y("fonts/Roboto-Regular.ttf");
public final String name;
private Typeface typeface;
Font(String s) {
name = s;
}
public Typeface getTypeface(Context context) {
if (typeface != null) return typeface;
try {
return typeface = Typeface.createFromAsset(context.getAssets(), name);
} catch (Exception e) {
return null;
}
}
public static Font fromName(String fontName) {
return Font.valueOf(fontName.toUpperCase());
}
Шаг 2. Определите свой собственный атрибут "customFont" в файле attrs.xml для вашего CustomTextView
attrs.xml -
<declare-styleable name="CustomFontTextView">
<attr name="customFont"/>
</declare-styleable>
<com.packagename.CustomFontTextView
android:id="@+id/some_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:customFont="rl"/>
Шаг 3: Создайте свой собственный TextView
public class CustomFontTextView extends TextView {
public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public CustomFontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CustomFontTextView(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
if (attrs == null) {
return;
}
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView, 0 ,0);
String fontName = a.getString(R.styleable.CustomFontTextView_customFont);
String textStyle = attrs.getAttributeValue(styleScheme, styleAttribute);
if (fontName != null) {
Typeface typeface = Font.fromName(fontName).getTypeface(context);
if (textStyle != null) {
int style = Integer.decode(textStyle);
setTypeface(typeface, style);
} else {
setTypeface(typeface);
}
}
a.recycle();
}
Создайте свой собственный TextView с пользовательским стилем.
Пример:
public class YourTextView extends TextView {
public YourTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public YourTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public YourTextView(Context context) {
super(context);
init();
}
private void init() {
Typeface tf = Typeface.createFromAsset(context.getAssets(),
"fonts/yourfont.ttf");
setTypeface(tf);
}
}
Вы можете использовать в своем XML.