如何在线添加自定义字体到应用中的TextView,但是使用XML?

时间:2017-10-26 09:50:24

标签: android xml textview

我想在Android应用程序中添加一个名为SamsungOne的自定义Samsung字体,我知道您可以将字体从在线链接到网站上,但是如何为应用程序执行此操作,但使用XML? Java很好,但XML会更好。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

.ttf中添加从互联网下载的app ⟶ src ⟶ main ⟶ assets。 然后,您可以使用此代码段将其应用于您的文本视图,编辑文本等。

TextView t = (TextView) findViewById(R.id.textView3);
Typeface typeface = Typeface.createFromAsset(getAssets(), "century_gothic.ttf"); 
                   // century_gothic.ttf is the name of your .ttf file stored in assets.
t.setTypeface(typeface);

答案 1 :(得分:0)

您可以在资产文件夹中复制该字体并使用它。用java:

typeface = Typeface.createFromAsset(context.getApplicationContext().getAssets(),
                        typefaceName);

要从xml中使用它,您需要创建自定义视图(TextView或Edittext,无论您想要什么)。在attrs.xml中,您可以定义所有类型的face,并使用该属性设置Typeface。请参阅下面的编辑文本的自定义实现: -

public class CustomTextView extends TextView {

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

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

    handleStyleable(context, attrs);
}

private void handleStyleable(Context context, AttributeSet attrs) {
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomFont);
    FONT_VAL font_val= FONT_VAL.NONE;
    try {
        for (FONT_VAL mode : FONT_VAL.values()) {
            if (ta.getInt(R.styleable.CustomFont_typeface, 3) == mode.getId()) {
                font_val = mode;
                break;
            }
        }
        if (font_val == FONT_VAL.MEDIUM_FONT) {
            setTypeface(AppUtil.getTypeface(context, Constants.FontName.MEDIUM));
        }else if(font_val== FONT_VAL.REGULAR_FONT){
            setTypeface(AppUtil.getTypeface(context, Constants.FontName.REGULAR));
        }else if(font_val== FONT_VAL.LIGHT_FONT){
            setTypeface(AppUtil.getTypeface(context, Constants.FontName.LIGHT));
        }else if(font_val== FONT_VAL.ITALIC){
            setTypeface(AppUtil.getTypeface(context, Constants.FontName.ITALIC));
        }else if(font_val== FONT_VAL.BOLD){
            setTypeface(AppUtil.getTypeface(context, Constants.FontName.BOLD));
        }
    }catch (Exception e){
        e.printStackTrace();
    }
}

public enum FONT_VAL {
NONE(0),MEDIUM_FONT(1), REGULAR_FONT(2),LIGHT_FONT(3), ITALIC(4),BOLD(5);
private final int ID;
FONT_VAL(final int id) {
    this.ID = id;
}
public int getId() {
    return ID;
}

为attrs.xml中的每种字体定义自定义属性: -

<declare-styleable name="CustomFont">
    <attr name="typeface" format="enum">
        <enum name="medium_font" value="1" />
        <enum name="regular_font" value="2" />
        <enum name="light_font" value="3" />
        <enum name="italic" value="4" />
        <enum name="bold" value="5" />
    </attr>
</declare-styleable>

然后你可以直接在XMl中使用它:

    <com.views.CustomTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/white"
        app:typeface="bold" />

要从外部存储设置字体,您只需在运行时执行此操作:

Typeface typeface = Typeface.createFromFile(
new File(Environment.getExternalStorageDirectory(), "font.ttf"));