Android 删除Html.fromHtml()之后的额外换行符
我正在尝试将html放入文本视图中。一切都很完美,这是我的代码Android 删除Html.fromHtml()之后的额外换行符,android,html,line-breaks,spanned,Android,Html,Line Breaks,Spanned,我正在尝试将html放入文本视图中。一切都很完美,这是我的代码 String htmlTxt = "<p>Hellllo</p>"; // the html is form an API Spanned html = Html.fromHtml(htmlTxt); myTextView.setText(html); String htmlText=“helllo”;//html是一种API形式 跨距html=html.fromHtml(htmlTxt); 设置文本(ht
String htmlTxt = "<p>Hellllo</p>"; // the html is form an API
Spanned html = Html.fromHtml(htmlTxt);
myTextView.setText(html);
String htmlText=“helllo”;//html是一种API形式
跨距html=html.fromHtml(htmlTxt);
设置文本(html);
这将使用正确的html设置我的文本视图。但我的问题是,html中有一个标记,进入TextView的结果文本的末尾有一个“\n”,因此它会将我的TextView的高度推高
由于它是一个跨变量,我无法应用regex replace来删除“\n”,如果我要将其转换为字符串,然后应用regex,我将失去让html锚正常工作的功能
有人知道从“已跨越”变量中删除结束换行符的解决方案吗?可跨越是一个字符序列,您可以对其进行操作 这项工作: myTextView.setText(noTrailingwhiteLines(html)); private CharSequence noTrailingwhiteLines(CharSequence text) { while (text.charAt(text.length() - 1) == '\n') { text = text.subSequence(0, text.length() - 1); } return text; } setText(noTrailingwhiteLines(html)); 专用字符序列noTrailingwhiteLines(字符序列文本){ 而(text.charAt(text.length()-1)='\n'){ text=text.subSequence(0,text.length()-1); } 返回文本; }
回答得好,克里斯汀。今天下午,我编写了一个类似的函数来删除字符序列中的尾随空格:
/** Trims trailing whitespace. Removes any of these characters:
* 0009, HORIZONTAL TABULATION
* 000A, LINE FEED
* 000B, VERTICAL TABULATION
* 000C, FORM FEED
* 000D, CARRIAGE RETURN
* 001C, FILE SEPARATOR
* 001D, GROUP SEPARATOR
* 001E, RECORD SEPARATOR
* 001F, UNIT SEPARATOR
* @return "" if source is null, otherwise string with all trailing whitespace removed
*/
public static CharSequence trimTrailingWhitespace(CharSequence source) {
if(source == null)
return "";
int i = source.length();
// loop back to the first non-whitespace character
while(--i >= 0 && Character.isWhitespace(source.charAt(i))) {
}
return source.subSequence(0, i+1);
}
你可以用这句话。。。完全有效;) 我知道你的问题已经解决了,但也许有人会觉得这很有用
try{
string= replceLast(string,"<p dir=\"ltr\">", "");
string=replceLast(string,"</p>", "");
}catch (Exception e) {}
您可以尝试以下方法:
Spanned htmlDescription = Html.fromHtml(textWithHtml);
String descriptionWithOutExtraSpace = new String(htmlDescription.toString()).trim();
textView.setText(htmlDescription.subSequence(0, descriptionWithOutExtraSpace.length()));
您可以使用实际的HTML换行符(
)吗?您可以将换行符放在文本之前,后面什么也不放,因此它是:hellllooooo,这将使它在文本上方有一个换行符,但在文本下方没有任何换行符。@Ben,html返回值来自API,我无法控制它。也许使用它可以工作。还有很多其他的函数可以帮助你解决这个问题…我今天一直在努力解决这个问题。下面的答案和我自己写的一样好用。问题在于标记不仅在末尾,而且在文本的其他地方。唯一的方法是将其转换为字符串并进行.replace(…)操作,但随后会丢失所有格式设置。也请检查这一点,非常简单的方法可以工作;)这对于
SpannableString
s来说效率很低,因为subSequence()
创建了一个全新的SpannableString
对象。被接受的答案要好得多。当你在程序员的时间、代码可读性和程序效率之间做出权衡时,这取决于哪个版本更好。我认为程序效率是最不相关的参数,除非您的代码在百万设备上每秒执行一千次。这是IMO A <代码>做的地方,而比<<代码>更可读,而:<代码> do {-i;},(i >=0 & &字符空白(C.CARAT(i)))< /代码>(显然,将其拆分为多行——StackOverflow不允许我在注释中这样做)我在使用CharSequence时遇到问题,因此必须将其转换为跨距,例如temp=(跨距)temp.subSequence(0,temp.length()-2);//具有“\n\n”在末尾,您不是通过将跨距对象转换为字符串而丢失了跨距吗?@Saket您不是返回修剪过的字符串,而是创建了具有修剪过的字符串长度的跨距字符序列的子序列。您没有丢失跨距。但是,如果有前导空格,这将不起作用,对吗?trim()删除前导空格和尾随空格
Spanned htmlDescription = Html.fromHtml(textWithHtml);
String descriptionWithOutExtraSpace = new String(htmlDescription.toString()).trim();
textView.setText(htmlDescription.subSequence(0, descriptionWithOutExtraSpace.length()));