3

我有一个关于向 textview 添加多个自定义字体的问题。我基本上已经在字体文件夹中添加了字体,并根据我在网上找到的解决方案为 fonttextview 创建了一个 java 类。但是我看到他们只添加了一种字体,我想添加多种字体,如roboto-regular、roboto-bold、cabin-bold 等。这是我到目前为止的代码:

public class FontTextView extends TextView {


    public FontTextView(Context context) {
      super(context);
      Typeface face=Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Bold.ttf"); 
      this.setTypeface(face);

    }

    public FontTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
     Typeface face=Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Bold.ttf"); 
  this.setTypeface(face); 
    }

    public FontTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
     Typeface face=Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Bold.ttf"); 
  this.setTypeface(face); 
    }

我该如何去创建多种字体?另外,我尝试了 styleable 等,但它显示错误,因为它不支持 styleable 类,任何人都可以在现有代码中添加另一种字体并引导我完成检索过程吗?

谢谢!贾斯汀

4

3 回答 3

5

将以下代码用于设置为 xml 文件的不同字体。

public class CustomTextView extends TextView {
private static final String TAG = "CustomTextView";

public CustomTextView(Context context) {
    super(context);
}

public CustomTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setCustomFont(context, attrs);
}

public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setCustomFont(context, attrs);
}

private void setCustomFont(Context ctx, AttributeSet attrs) {
    TypedArray a = ctx.obtainStyledAttributes(attrs,R.styleable.CustomTextView);
    String customFont = a.getString(R.styleable.CustomTextView_customFont);
    setCustomFont(ctx, customFont);
    a.recycle();
}

public boolean setCustomFont(Context ctx, String asset) {
    Typeface tf = null;
    try {
    tf = Typeface.createFromAsset(ctx.getAssets(), "fonts/"+asset);  
    } catch (Exception e) {
        Log.e(TAG, "Could not get typeface: "+e.getMessage());
        return false;
    }

    setTypeface(tf);  
    return true;
}

}

在 xml 文件中,您可以将其用作:

<com.package_name.CustomTextView
           your_name:customFont="arialbd.ttf" />

和 int 主要父布局添加

xmlns:your_name="http://schemas.android.com/apk/res/com.package_name"

并记住在 values 文件夹中添加 attrs.xml,并resource在其中添加以下内容

<resources>
<declare-styleable name="CustomTextView">
    <attr name="customFont" format="string"/>
</declare-styleable>

希望能帮助到你

于 2013-05-30T13:41:57.083 回答
2

我建议在您的文本中使用 HTML,以便您可以使用不同的颜色/字体/...

看一下:

文本视图中的 Html,具有不同字体的粗体和斜体

TextView 中是否可以有多种样式?

在 TextView 中使用 size HTML 属性

一个有趣的解决方案是编写字体跨度:

 public class CustomTypefaceSpan extends TypefaceSpan {

查看如何将 TypefaceSpan 或 StyleSpan 与自定义字体一起使用?

于 2013-05-30T13:28:14.083 回答
1

您可以在文本中编写html样式并使用

textView.setText(Html.fromHtml(displayString));

添加颜色的示例字符串

String displayString = " <p style=\"color:#B4009E;\">Your string </p>" ;

这就是我们如何在 textView 中创建 html 样式

于 2013-05-30T13:33:31.567 回答