如何在.xml文件而不是.java文件中设置自定义字体?

我正在创建一个应用程序,我想在其中设置自定义字体。

但我不能在.xml文件中使用自定义字体,为了使用它,我需要初始化.java文件中的每个TextView。

这个过程太漫长而且耗时。

如果有人知道那么请帮帮我…

供你参考,

public class MyTextView extends TextView { public MyTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public MyTextView(Context context) { super(context); init(); } public void init() { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/yourfont.ttf"); setTypeface(tf ,1); } } 

在XML中,

   

Android API 16+

从Android 8.0(API 26)开始,本机支持在XML中设置字体。 但是,使用支持库将其扩展到Android 4.1(API 16)。

在此处输入图像描述

1.为项目添加字体

  • 右键单击res文件夹,然后转到“ 新建”>“Android资源目录” 。 键入font作为资源types的名称和字体
  • 将字体复制并粘贴到新的res/font目录中。 我只是在我的例子中使用单一字体,常规的舞蹈脚本字体。 我将它重命名为dancing_script.ttf只是为了避免任何大写或非法字符的潜在命名问题。

2.创建font-family XML文件。

  • 右键单击res/font文件夹,然后选择“ New > Font Resource File 。 无论你想要什么都称它为 我正在调用我的my_custom_font.xml
  • 粘贴以下代码。 请注意,属性设置两次,一次用于android (API 26+),一次用于app (API 16+)。

         

3.以XML格式设置字体

现在您可以使用fontFamily属性在XML中设置字体。

  

笔记

  • 阅读文档以获取更多帮助。
  • 如果您需要支持pre-API 16,那么只需以编程方式设置字体即可 。

使用提供此function的库 ,例如书法 。

或者,使用Google的数据绑定库将字体“绑定”到您的小部件,如Lisa Wray所述 。

根据文档

Android 8.0(API级别26)引入了一项新function,即XML中的字体,它允许您将字体用作资源。 您可以在res / font /文件夹中添加字体文件以将字体捆绑为资源。 这些字体在您的R文件中编译,并在Android Studio中自动提供。 您可以借助新的资源types字体访问字体资源。 例如,要访问字体资源,请使用@ font / myfont或R.font.myfont。 要在运行Android API 14及更高版本的设备上使用字体XMLfunction,请使用支持库26。

要将字体添加为资源,请在Android Studio中执行以下步骤:

1.右键单击res文件夹,然后转到新建> Android资源目录。 将出现“新建资源目录”窗口。

2.在“资源types”列表中,选择“字体”,然后单击“确定”。 注意:资源目录的名称必须是font。

3.在字体文件夹中添加字体文件。

创建字体系列

字体系列是一组字体文件及其样式和重量详细信息。 在Android中,您可以创建一个新的字体系列作为XML资源,并将其作为单个单元访问,而不是将每个样式和权重作为单独的资源引用。 通过这样做,系统可以根据您尝试使用的文本样式选择正确的字体。

要创建字体系列,请在Android Studio中执行以下步骤:

1.右键单击字体文件夹,然后转到“新建”>“字体资源文件”。 将出现“新建资源文件”窗口。

2.输入文件名,然后单击“确定”。 新的字体资源XML在编辑器中打开。

3.在元素中包含每个字体文件,样式和权重属性。 以下XML说明了在字体资源XML中添加与字体相关的属性:

      

在XML布局中使用字体

在布局XML文件中,将fontFamily属性设置为要访问的字体文件。

  

打开“属性”窗口以设置TextView的字体。 选择一个视图以打开“属性”窗口。 注意:“属性”窗口仅在设计编辑器打开时可用。 选择窗口底部的“设计”选项卡。

展开textAppearance属性,然后从fontFamily列表中选择字体。

将字体添加到样式

打开styles.xml,并将fontFamily属性设置为您要访问的字体文件。

   

您可以简单地使用自定义文本视图

 public class HelveticaRagularTextView extends TextView { public HelveticaRagularTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs); } public HelveticaRagularTextView(Context context, AttributeSet attrs) { super(context, attrs); init(attrs); } public HelveticaRagularTextView(Context context) { super(context); init(null); } private void init(AttributeSet attrs) { // Just Change your font name Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), getContext().getResources().getString(R.string.font_helvetica_regular)); setTypeface(myTypeface); } 

}

现在你可以在你的xml中使用HelveticaRagularTextView。

这很容易使用

TextView扩展自定义类并自定义类中的字体。 然后,您就可以在xml使用该自定义textview类,而无需在代码中动态自定义字体。

祝你好运。

下载要使用的字体的ttf文件并将其粘贴到

SRC-> main->资产 – > font.ttf

然后,要使用ttf,您需要执行以下操作

用于将该字体设置为特定文本的操作如下

  TextView tv_the = (TextView) findViewById(R.id.the); Typeface face = Typeface.createFromAsset(getAssets(), "font.ttf"); tv_the.setTypeface(face); 

如果要将自定义字体设置为整个活动,请执行以下操作

 final ViewGroup mContainer = (ViewGroup) findViewById(android.R.id.content).getRootView(); final Typeface mFont = Typeface.createFromAsset(getAssets(), "badoni2.ttf"); Parameters.setAppFont(mContainer, mFont); 

并在应用程序中添加Parameters

 public class Parameters { public static final void setAppFont(ViewGroup mContainer, Typeface mFont) { if (mContainer == null || mFont == null) return; final int mCount = mContainer.getChildCount(); // Loop through all of the children. for (int i = 0; i < mCount; ++i) { final View mChild = mContainer.getChildAt(i); if (mChild instanceof TextView) { // Set the font if it is a TextView. ((TextView) mChild).setTypeface(mFont); } else if (mChild instanceof ViewGroup) { // Recursively attempt another ViewGroup. setAppFont((ViewGroup) mChild, mFont); } } } 

试试这个,让我知道它是否适合你