是否可以为TextView中的不同文本设置多个样式?
例如,我将文本设置如下:
tv.setText(line1 + "\n" + line2 + "\n" + word1 + "\t" + word2 + "\t" + word3);
Run Code Online (Sandbox Code Playgroud)
是否可以为每个文本元素设置不同的样式?例如,line1粗体,word1斜体等.
开发人员指南的常见任务和Android中的操作方法包括选择,突出显示或设置部分文本样式:
Run Code Online (Sandbox Code Playgroud)// Get our EditText object. EditText vw = (EditText)findViewById(R.id.text); // Set the EditText's text. vw.setText("Italic, highlighted, bold."); // If this were just a TextView, we could do: // vw.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE); // to force it to use Spannable storage so styles can be attached. // Or we could specify that in the XML. // …
支持库(此处为docs )允许您在XML中使用"res/font"文件夹中的TTF字体文件:
app:fontFamily="@font/lato_black"
Run Code Online (Sandbox Code Playgroud)
或通过代码:
val typeface = ResourcesCompat.getFont(context, R.font.lato_black)
Run Code Online (Sandbox Code Playgroud)
虽然我知道可以使用spannable技术在TextView内容的部分内容中设置不同的样式(例如粗体,斜体,颜色等等),但我发现设置不同字体的唯一方法就是使用内置在操作系统的字体,如这里,但我不能看到一个办法做到这一点的加载字体的新途径.
我试图找到一种方法来转换两者,但没有运气.当然,我也试图在可能的功能的文档中找到,并且我试图通过互联网找到它.
如何为TextView的不同部分设置不同的字体?
例如,在文本"Hello world"中,将"Hello"设置为"lato_black"的字体,其余为默认值.
编辑:由于我得到了来自两个不同的人的相同答案,我不能接受另一个.给他们两个+1的努力,我已经改变了一点问题:
我如何轻松地将字体样式设置为文本的一部分,同时让strings.xml文件使用自定义字体标记定义它.
例如,这可以在strings.xml文件中进行设置,如上所述:
<string name="something" ><customFont fontResource="lato_black">Hello</customFont> world</string>
Run Code Online (Sandbox Code Playgroud)
然后,在代码中,您要做的就是使用以下内容:
textView.setText (Html.fromHtml(text, null, CustomFontTagHandler()))
Run Code Online (Sandbox Code Playgroud)
我认为这非常重要,因为翻译后的字符串可能与英语中的字符串差别太大,因此您不能只解析字符串的文本,然后选择设置自定义字体的位置.它必须在strings文件中.