
String message = "Hello <br> hai<br> I am fine <hr>";tab.setText(HTML.fromHTML(message));
表明
你好
海
我很好
但没有横线.
这里HTML标签“hr”不起作用.有没有办法从支持的标签添加hr标签效果.提前致谢..
解决方法 HTML.fromHTML()不支持< hr>目前标记所以你需要编写自己的标记处理程序来实现HTML.TagHandler. AndroID中的TextVIEws使用Spans进行样式设置,因此我们需要创建一个绘制水平线的Span,我们称之为HrSpan.Java的
String HTML = "Hello <br> hai<br> I am fine <hr> And here's another line";HTMLTagHandler tagHandler = new HTMLTagHandler();Spanned styledText = HTMLCompat.fromHTML(HTML,HTMLCompat.FROM_HTML_MODE_LEGACY,null,tagHandler);textVIEw.setText(styledText);
HTMLTagHandler.java
public class HTMLTagHandler implements HTML.TagHandler { @OverrIDe public voID handleTag(boolean opening,String tag,Editable output,XMLReader xmlReader) { if (tag.equals("hr")) { handleHrTag(opening,output); } } private voID handleHrTag(boolean opening,Editable output) { final String placeholder = "\n-\n"; if (opening) { output.insert(output.length(),placeholder); } else { output.setSpan(new HrSpan2(),output.length() - placeholder.length(),output.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }} HrSpan.java
public class HrSpan extends ReplacementSpan { @OverrIDe public int getSize(@NonNull Paint paint,CharSequence text,int start,int end,@Nullable Paint.FontMetricsInt fm) { return 0; } @OverrIDe public voID draw(@NonNull Canvas canvas,float x,int top,int y,int bottom,@NonNull Paint paint) { paint.setStyle(Paint.Style.stroke); paint.setstrokeWIDth(8); // 8px tall line int mIDdle = (top + bottom) / 2; // Draw a line across the mIDdle of the canvas canvas.drawline(0,mIDdle,canvas.getWIDth(),paint); }} 科特林
val HTML = "Hello <br> hai<br> I am fine <hr> Another line here <hr><hr>"val tagHandler = HTMLTagHandler()textVIEw.text = HTMLCompat.fromHTML(HTML,tagHandler)
class HTMLTagHandler : HTML.TagHandler { overrIDe fun handleTag(opening: Boolean,tag: String?,output: Editable?,xmlReader: XMLReader?) { if (output == null) return when (tag) { "hr" -> handleHrTag(opening,output) // Handle other Tags if needed } } private fun handleHrTag(opening: Boolean,output: Editable) { val placeholder = "\n-\n" // Makes sure the HR is drawn on a new line if (opening) { output.insert(output.length,placeholder) } else { output.setSpan(HrSpan(),output.length - placeholder.length,output.length,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE) } }} class HrSpan : ReplacementSpan() { overrIDe fun getSize(paint: Paint,text: CharSequence?,start: Int,end: Int,fm: Paint.FontMetricsInt?) = 0 overrIDe fun draw( canvas: Canvas,x: float,top: Int,y: Int,bottom: Int,paint: Paint ) { paint.style = Paint.Style.stroke paint.strokeWIDth = 8f // Draw line in the mIDdle of the available space val mIDdle = ((top + bottom) / 2).tofloat() canvas.drawline(0f,canvas.wIDth.tofloat(),paint) }} 这会给你一个像这样的结果.它匹配TextVIEw的宽度,因此如果您希望线占据整个宽度,请将TextVIEw wIDth属性更改为match_parent.
总结以上是内存溢出为你收集整理的android中的标签用法全部内容,希望文章能够帮你解决android中的标签用法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)