字体自定义字体不起作用

时间:2016-12-24 19:12:24

标签: java android true-type-fonts

字体始终显示默认字体。

我的字体存储在 资产 / 字体 中。我试图使用其他字体,并重新编码字体。 PixlUI库也没有解决问题。

MainActivity.java

mysqli_query("SELECT product, expirydate, SUM(quantity), status FROM
   stockmovement a LEFT JOIN (SELECT  productid, product AS productname FROM
   products) b ON a.product = b.productid WHERE a.status = '0' GROUP BY 
   a.product, a.expirydate HAVING SUM(a.quantity) > 0 ORDER BY a.product,
   a.expirydate ASC");

activity_main.xml中

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);
}

3 个答案:

答案 0 :(得分:0)

如果您之前还没有尝试过使用过这种字体。我建议删除您的资源文件夹,在您的res文件夹中创建一个新的资产文件夹,然后将其移回原先的位置。有时Android Studio不接受构建的assets文件夹。

如此处所示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" />

在values文件夹中创建一个attrs.xml。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomFontButton">
        <attr name="customFont" format="string"/>
    </declare-styleable>
</resources >

每次你想要按钮上的自定义字体(或大多数其他小部件,可以应用相同的逻辑)时,这样可以省去setTypeFace

答案 1 :(得分:0)

不要使用setTypeface方法直接设置Typeface,而是尝试下面的代码片段:

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;
}

请知道是否有任何问题。

答案 2 :(得分:0)

一个不错的选择是仔细检查您的文件夹,字体和字体目录名称拼写。一个好主意是显示任何错误将被打印出来并发布给我们以便更好地理解问题。如果您也可以发布字体名称并仔细检查它们是否相同,并确保您的资产位于正确的位置,希望我帮助。