2016-12-24 5 views
1

Тип шрифта всегда показывает шрифт по умолчанию.Нестандартный шрифт шрифта не работает

Мои шрифты хранятся в активов/шрифты. И я попытался использовать другие шрифты и перекодировать шрифты. Также библиотека PixlUI не решила проблему.

MainActivity.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_main); 

    Button button = (Button) findViewById(R.id.button); 
    Typeface typeface = Typeface.createFromAsset(getAssets(),"fonts/OldEnglishFive.ttf"); 
    button.setTypeface(typeface); 
} 

activity_main.xml

<Button 
    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" /> 

ответ

0

Если вы еще не пробовали использовать шрифт ранее. Я бы предложил удалить папку с вашими ресурсами, создав новую папку с данными в папке 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 каждый раз вы хотите специальный шрифт на кнопке (или большинство других виджетов, та же логика может быть применена)

+0

Хорошо, нет проблем с активами ** _ folder _ **. Я думаю, что второй способ, который вы предложили wold, будет большим, но я не понимаю, как определить _CustomFontButton_ и _CustomFontButton_customFont_. –

+0

внутри вашей папки res, щелкните правой кнопкой мыши по папке значений и добавьте новый xml, вызовите его attrs.xml и скопируйте код, который я добавил в конце ответа. –

+0

Нет, я реализовал его, но без результата. –

0

Вместо непосредственной установки Typeface с использованием методы setTypeface , выполните нижеприведенный фрагмент кода:

protected void onCreate(Bundle savedInstanceState) { 
    ... //do whatever you want 

    Button button = (Button) findViewById(R.id.button); 
    Typeface typeface = Typeface.createFromAsset(getAssets(),"fonts/OldEnglishFive.ttf"); 

    button.setText(changeFontStyle("your text", typeface)); 
} 

// custom function for changing the font style of text 
public Spannable changeFontStyle(String finalString, Typeface typeface){ 

    spannable = new SpannableString(finalString); 
    spannable.setSpan(new CustomTypefaceSpan("", typeface), 0, finalString.length(), 0); 

    return spannable; 
} 

Le me know if person любая проблема.

0

Хорошим вариантом является двойная проверка написания папок, шрифтов и шрифтов. Хорошей идеей было бы показать любые ошибки , которые были бы напечатаны и отправлены для нас, чтобы понять проблему немного лучше. Если вы также можете опубликовать имя шрифта и дважды проверить, совпадают ли они, и убедитесь, что ваши активы находятся в правильном месте, надеюсь, что я помог.

Смежные вопросы