Если вы еще не пробовали использовать шрифт ранее. Я бы предложил удалить папку с вашими ресурсами, создав новую папку с данными в папке res и затем переместив ее обратно туда, где она была ранее. Иногда Android Studio не принимает созданную папку с ресурсами.
, как показано здесь Runtime Exception: Font not found for every font i've tried - Android
также, я рекомендовал бы создать класс, который расширяет Button
так, что он будет автоматически установить шрифт для этого виджета, если вы задаете правильный XML для кнопки.
Примером может быть:
public class CustomFontButton extends Button {
AttributeSet attr;
public CustomFontButton(Context context) {
super(context);
setCustomFont(context, attr);
}
public CustomFontButton(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public CustomFontButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
String customFont = null;
TypedArray a = null;
if (attrs != null) {
a = ctx.obtainStyledAttributes(attrs, R.styleable.CustomFontButton);
customFont = a.getString(R.styleable.CustomFontButton_customFont);
}
if (customFont == null) customFont = "fonts/OldEnglishFive.ttf";
setCustomFont(ctx, customFont);
if (a != null) {
a.recycle();
}
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), asset);
} catch (Exception e) {
Log.e("textView", "Could not get typeface", e);
return false;
}
setTypeface(tf);
return true;
}
}
, а затем в вашем XML вам нужно будет только изменить
<yourpackagename.CustomFontButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="220dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:onClick="doSomething"
android:text="TEXT" />
создать attrs.xml внутри папки значений.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomFontButton">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources >
Это избавит вас от необходимости делать setTypeFace
каждый раз вы хотите специальный шрифт на кнопке (или большинство других виджетов, та же логика может быть применена)
Хорошо, нет проблем с активами ** _ folder _ **. Я думаю, что второй способ, который вы предложили wold, будет большим, но я не понимаю, как определить _CustomFontButton_ и _CustomFontButton_customFont_. –
внутри вашей папки res, щелкните правой кнопкой мыши по папке значений и добавьте новый xml, вызовите его attrs.xml и скопируйте код, который я добавил в конце ответа. –
Нет, я реализовал его, но без результата. –