Java 如何在文本视图中选择粗体文本
我有以下声明:Java 如何在文本视图中选择粗体文本,java,android,text,Java,Android,Text,我有以下声明: s = s + "Id: " + lc.getID() + " Name: " + lc.getName() + "\n" + " Phone Number: " + lc.getPhone() + " Email: " + lc.getEmail() + "\n" + " Description: " + lc.getDescription() + "\n\n" 打印出来的是: Id: 1 Name
s = s + "Id: " + lc.getID() + " Name: " + lc.getName() + "\n"
+ " Phone Number: " + lc.getPhone() + " Email: " + lc.getEmail() + "\n"
+ " Description: " + lc.getDescription() + "\n\n"
打印出来的是:
Id: 1 Name: Eric
Phone Number: 8294038 Email: foo@gmail.com
Description: Cool guy Eric
我只想加粗标题(Id、姓名等)
我试过这个:
s = s + Html.fromHtml(" <b> Id: </b>" + lc.getID() + " <b> Name: </b>" + lc.getName() + "\n"
+ " Phone Number: " + lc.getPhone() + " Email: " + lc.getEmail() + "\n"
+ " Description: " + lc.getDescription() + "\n"
+ "\n\n");
s=s+Html.fromHtml(“Id:+lc.getID()+”名称:“+lc.getName()+”\n”
+电话号码:“+lc.getPhone()+”电子邮件:“+lc.getEmail()+”\n
+描述:“+lc.getDescription()+”\n”
+“\n\n”);
但它不仅没有加粗,而且去掉了新行(\n)。有什么办法可以做到这一点吗?谢谢。这将需要对您的终端进行一点解析,但您肯定希望深入研究 例如,假设我有以下字符串:
String s = "How now brown cow";
然后,我会将其转换为SpannableString
,只需将字符串输入构造函数,如下所示:
SpannableString ss = new SpannableString(s);
从那里你需要你的风格与跨越面积。为此,我将只使用SubscriptSpan
,但如果您希望创建自己的类,只需创建自己的类扩展并重写updateDrawState(TextPaint ds)
方法即可。以下是如何设置跨度:
/ *
* the first argument is the span effect you want, the second and third
* are the start and end indices, respectively, and the last argument is
* for setting a flag, which you probably won't need.
*/
ss.setSpan(new SubscriptSpan(), 0, 2, 0);
现在,您可以直接将字符串放入TextView
,它应该按照您的意愿显示,如下所示:
myTextView.setText(ss);
Html.fromHtml()
跨越的不是字符串
通过执行s=s+Html.fromHtml(…)
,您是在说“请将此Html解析为一个跨距的,然后扔掉所有格式,给我一个字符串,我可以连接到其他字符串”。这不是你想要的--你想要保留格式。但是Java字符串
没有格式,因此普通的字符串连接无法保持格式
除此之外,正如Manishika指出的,在HTML中新行被忽略,因为您使用HTML元素来表示垂直空白
你的选择包括:
生成一个completeHTML代码段——包括您试图将其连接到的内容——然后在整个过程中使用HTML.fromHtml()
。您可能希望为此使用模板引擎(例如),或String.format()
。或者,使用StringBuilder
,而不是大量的+
操作(更少的内存波动,更快的性能)。请确保使用
或
作为换行符/段落分隔符
使用SpannableStringBuilder
从组件组装字符串及其格式
使用TextUtils.concat(s,Html.fromHtml(…)
而不是s+Html.fromHtml(…)
,因为concat()
将维护实现格式化的跨度。虽然fromHtml()
返回的span
的实现不是String
,但它和String
都是CharSequence
,因此可以使用concat()
尝试使用“
”而不是“\n”这对新行有效,但仍然不适用。请欣赏答案!不要欣赏这些侮辱。不过,谢谢你的帮助@尼克:对多个字符串连接使用+
是一种Java反模式,在学习Java的任何地方都应该涉及到这一模式。顺便说一句,我在答案中添加了第三个选项(当我开始回答时,我记着了,然后忘记了…),你能解释一下如何连接这些字符串吗?或者至少给我一个开始。请原谅我没有knowledge@nick:使用StringBuilder
,如回答中所述。非常感谢。我去看看