【问题标题】:set textView font and typeface from xml instead of using java从 xml 设置 textView 字体和字体,而不是使用 java
【发布时间】:2017-10-04 20:00:14
【问题描述】:

在 xml 代码中,我可以像下面这样使用 fontfamily:

<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textColor="@color/white"
       android:fontFamily="monospace"
       android:typeface="monospace"
                                  />

我可以在我的活动中设置字体如下:

Typeface typeface = Typeface.createFromAsset(getAssets(),"font.ttf");
textview.setTypeface(typeface);

有什么方法可以从 Assets() 文件夹中设置 xml 中的字体来设置自定义 typeFace?

我想达到这样的目标......

<TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:typeface="@assets/font.ttf"
/>

我搜索了类似的东西,但没有找到有用的解决方案。

【问题讨论】:

  • 您可以创建自己的TextView 并应用您想要的字体样式
  • @MD 谢谢,但是如果有 android 而不是库的自定义方式会更好。
  • 在 android 上,您也可以定义字体系列。其他版本的书法

标签: android xml android-assets android-fonts


【解决方案1】:

第 1 步:

创建 assets 文件夹并在此文件夹中创建另一个文件夹 fonts 见下图。创建这些文件夹后,将您的 ttf 文件粘贴到字体文件夹中。

第 2 步: 在 values 文件夹中创建 attrs.xml 文件,见下图并粘贴此代码。

代码

    <?xml version="1.0" encoding="utf-8"?>
<resources>

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

</resources>

第 3 步:

创建CustomTextview.class并粘贴这段代码

    import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.TextView;


public class CustomTextView extends TextView {

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(attrs);
    }

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

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

    }

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

    private void init(AttributeSet attrs) {
        if (attrs != null) {
            TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CustomTextView);

            String fontName = a.getString(R.styleable.CustomTextView_font);

            try {
                if (fontName != null) {
                    Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName);
                    setTypeface(myTypeface);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            a.recycle();
        }
    }

}

第 4 步:

在 xml 文件中声明您的 customTextview,如下所示。

使用这个属性app:font="your ttf file"

注意->com.javacodegeeks.androidcustomfontexample.CustomTextView注明你的包名和类名。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="20dp">

    <com.javacodegeeks.androidcustomfontexample.CustomTextView
        android:id="@+id/custom_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="This is a custom text view!"
        android:textSize="30dp"
        app:font="arial.ttf" />

</LinearLayout>

您可以从HERE获取演示

希望对你有帮助

【讨论】:

    【解决方案2】:

    启动 o 后,您将像这样定义自定义字体:

    <font-family xmlns:android="http://schemas.android.com/apk/res/android">
        <font
            android:fontStyle="normal"
            android:fontWeight="400"
            android:font="@font/lobster_regular" />
        <font
            android:fontStyle="italic"
            android:fontWeight="400"
            android:font="@font/lobster_italic" />
    </font-family>
    

    在 XmlFile 中看起来像这样:

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-17
      • 2020-03-01
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      相关资源
      最近更新 更多