Android TextView中加粗和普通文本

13

我在SO上进行了彻底的搜索,但没有找到我的问题的答案。

我想设置一个段落,我将使用XML来设置它。

这段文字包含标题、步骤和常规文本。我想将标题和步骤设置为粗体,其余部分为普通文本。

我可以使用不同的 '< span>' 来实现,但是如何在同一个TextView中进行不同句子的设置呢?

我的意思是,如何使用同一个TextView为不同的句子设置不同的属性?


1
请查看 https://dev59.com/g3A75IYBdhLWcg3wi5sr#6159538。 - Arun C
8个回答

31

使用Spannable String

 TextView tv = (TextView) findViewById(R.id.tv);  
 String steps = "Hello Everyone";
 String title="Bold Please!";

 SpannableString ss1=  new SpannableString(title);
 ss1.setSpan(new StyleSpan(Typeface.BOLD), 0, ss1.length(), 0); 
 tv.append(ss1);
 tv.append("\n");
 tv.append(steps);

enter image description here

要了解更多样式,请查看链接 @ http://blog.stylingandroid.com/archives/177


1
这是屏幕截图。谢谢,这对我很有效!正如您所看到的,我可以为“标题”,“作者”和“标签”设置加粗。 - AlexMelw

15

在您的字符串文件中

<string name="your_text">
<![CDATA[
<p> <b>Title</b> </p>
<p><b><i>Step 1</i></b><p>step1 content content content  content content content</p></p>
<p><b><i>Step 2</i></b><p>step2 content  content content content  content content content</p></p>
]]>
</string>

然后在你的活动中

        TextView tv=(TextView)findViewById(R.id.textView1);
        tv.setText(Html.fromHtml(getString(R.string.your_text)));

并输出

在此输入图片描述


在这种情况下,我们直接使用字符串中的值,所以涉及到 XML 吗? - user2450692
尝试过这个,但它没有考虑空格:<p> 43<br /> x 78<br />____<br /> 4</p> 即使在注释中也不会保留空格...在43和4之前有3个空格。 - user2450692
我应该使用 &nbsp 吗?它可以工作,但有其他替代方案吗? - user2450692

3
您可以像在HTML中一样格式化它:我们称其为custom_text
<b>Your title here</b>
This is the non-bolded stuff. 

然后使用Html类加载文本:

mTextView.setText(Html.fromHtml(getString(R.string.custom_text)));

那将创建一个可扩展的字符串并将其设置在TextView上。

有没有其他方法可以不使用HTML呢? - user2450692
我们可以直接在XML <TextView>中完成,而不是使用String.xml吗? - user2450692

3

请将这个字符串放入res->string.xml文件中

<string name="your_html">
    <![CDATA[p><b>This is bold text</b> rementing is simple text

    ]]>
    </string>

现在,每当您需要使用这个东西时,您都可以使用它。
tv.setText(Html.fromHtml(getString(R.string.your_html)));

这是最佳方式,并且非常有效。


嗨,我尝试了所有的方法在Android M中使字符串加粗和斜体,但都没有成功。 - Raghu

1

TextView支持可扩展字符串。您可以制作自定义String,或者以html格式设置字符串,然后使用tv.setText(Html.fromHtml(yourString));进行设置。


1

Kotlin解决方案: 对于我来说,问题在于我通过数据绑定在XML中设置了一个文本。我必须将其删除。然后这个问题就开始生效了。

val spannableStringBuilder = SpannableStringBuilder(headerText)
    spannableStringBuilder.setSpan(StyleSpan(Typeface.BOLD), 0, headerText.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    spannableStringBuilder.append(" ")
    spannableStringBuilder.append(subText)
    textView.text = spannableStringBuilder

1
最好的方法是使用字符串资源来实现。
<string name="sample_string"><![CDATA[<b>Title</b>StackOverflow]]></string>

注意,粗体标签(<b> </b>)之间的文本将以粗体显示。同样,您可以设置其他样式。例如,<i>表示斜体,<u>表示下划线。
希望这能有所帮助,祝好运!

0
请使用以下代码替代:

首先,声明textView

TextView tv1 = (TextView) getActivity().findViewById(R.id.t1); 

然后将其文本设置为您想要的字符串

tv1.setText(Html.fromHtml(getString(R.string.my_text)));

最后,为您的textView设置字体。
tv1.setTypeface(null, Typeface.BOLD); 

好了,完成了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接