Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android中的标签用法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个声明,我必须加上一条水平线.但是它没有得到 android支持似乎有任何方法可以使用支持标签在Android中重新创建标签效果.

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中的标签用法全部内容,希望文章能够帮你解决android中的标签用法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。