Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文本视图中的Html,粗体和斜体的字体不同_Android - Fatal编程技术网

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

Android 文本视图中的Html,粗体和斜体的字体不同,android,Android,我正在尝试在文本视图上使用自定义字体。TextView文本设置为textView1.setText(Html.fromHtml(htmlText)) html包含粗体和斜体跨距 现在。我买了一种定制字体。该字体附带3个不同的文件(ttf)。一个表示常规,一个表示粗体,一个表示斜体 如何将这三个字体文件应用于文本视图?此链接将帮助您了解如何自定义android字体: 关于如何将这些字体文件应用于textview,您需要首先在项目中集成它们: Typeface tf = Typeface.creat

我正在尝试在
文本视图上使用自定义字体。
TextView
文本设置为
textView1.setText(Html.fromHtml(htmlText))

html包含粗体和斜体跨距

现在。我买了一种定制字体。该字体附带3个不同的文件(ttf)。一个表示常规,一个表示粗体,一个表示斜体


如何将这三个字体文件应用于文本视图?

此链接将帮助您了解如何自定义android字体:

关于如何将这些字体文件应用于textview,您需要首先在项目中集成它们:

Typeface tf = Typeface.createFromAsset(this.getAssets(),
        "fonts/xxx.TTF");
txt1.setTypeface(tf);
ttf文件应放在-->assets/fonts/xxx.ttf中


所有需要的细节都在“使用自定义字体”一段中。

我想您希望对代码进行快速重构,以便合并资产

我将扩展TextView并尝试解析HTML,并在onDraw应用适当的字体

重写
setText
并解析参数,为应使用的字符和正确的字体创建映射

然后,覆盖
onDraw
并在绘制之前,根据上一步创建的映射更改
super.getPaint()
的字体

代码应该与中的
onDraw
方法中显示的代码相同,但是您将设置先前确定的字体,而不是应用
super.getTypeface()


希望它能帮助您

尝试将所有字体逐一应用于同一文本视图的文本。 我认为这样你就可以对同一个文本视图应用更多的效果

米洛斯的密码是对的。 此外,我还提出了自己的解释。 您可以将字体添加到资产文件夹中,然后可以将该字体逐个应用到文本视图

不确定,但可能对你有用

我的代码:

Typeface font1 = Typeface.createFromAsset(getAssets(), "YOUR_FONT1.ttf");
Typeface font2 = Typeface.createFromAsset(getAssets(), "YOUR_FONT2.ttf");
Typeface font3 = Typeface.createFromAsset(getAssets(), "YOUR_FONT3.ttf");

chips_text.setTypeface(font1);
chips_text.setTypeface(font2);
chips_text.setTypeface(font3);

请随意评论和查询。

API 16+目前最好的方法是定义字体资源文件。如果您正在使用v26以上的支持库或新的AndroidX库,基本上您可以在fonts文件夹中添加普通和斜体ttf字体文件,并创建字体资源xml,使其看起来像

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
    app:fontStyle="normal"
    app:fontWeight="400"
    app:font="@font/custom_regular_font" />
<font
    app:fontStyle="italic"
    app:fontWeight="400"
    app:font="@font/custom_italic_font" />
<font
    app:fontStyle="normal"
    app:fontWeight="700"
    app:font="@font/custom_bold_font" />
</font-family>


最后一个是粗体字体,将此xml假设custom_font_family.xml作为android:fontFamily=“@font/custom_font_family”应用到您的文本视图中,现在您使用fromHtml设置的任何html文本以及三种跨度类型中的任何一种都将在需要时使用正确的字体,这甚至可以让您拥有一个混合了完全不同字体的自定义字体系列,而不必来自同一系列。

使用包含不同样式(常规、粗体、斜体等)的单个字体文件很容易。问题在于每种字体位于不同文件中的字体(即font\u regular.ttf、font\u bold.ttf、font\u italic.ttf)。使用
setTypeface
只能设置一种字体,因此只能使用一种样式。我需要的是在单个文本视图中使用多个字体文件。根据以下事实:setTypeface()将用自定义ttf文件替换android使用的默认ttf文件:在单个文本视图中使用不同字体的唯一方法(目前)是手动将这些字体合并到一个ttf文件中。这可以通过使用字体编辑器(如)来完成。希望有帮助。我看不到在TTFEdit(或我测试过的任何其他字体编辑软件)中合并两个文件的选项。必须问关于合并字体文件的问题:)这里有一个例子:你可以谷歌TTF EditorI看不到链接中的例子,你能详细说明如何合并字体文件吗?是的,我看了。不幸的是,每次调用setTypeface都会覆盖上一次调用。好的,那么你必须按照米洛斯的回答。必须创建一种包含所有所需内容的字体,然后将其设置为“指定视图”。