Android Kotlin:如何使用 Markwon 标题断线设置行间距

问题描述 投票:0回答:1

我尝试搜索 Markwon API 和插件,但我似乎找不到在行之间添加额外间距的方法。 有谁知道该怎么做?我应该使用库中的特定插件或选项吗? 这是我的代码示例:

fun textToMarkdown(context: Context, text: String, textView: AppCompatTextView) {
    val markwon = Markwon.builder(context)
        .usePlugin(SoftBreakAddsNewLinePlugin.create())
        .usePlugin(object : AbstractMarkwonPlugin() {
            override fun configureSpansFactory(builder: MarkwonSpansFactory.Builder) {
                builder.setFactory(Heading::class.java) { _, props ->
                    val level = props.get(CoreProps.HEADING_LEVEL) ?: 0
                    val textAppearanceSpans = when (level) {
                        1 -> arrayOf(TextAppearanceSpan(context, R.style.H1Style))
                        2 -> arrayOf(TextAppearanceSpan(context, R.style.H2Style))
                        3 -> arrayOf(TextAppearanceSpan(context, R.style.H3Style))
                        4 -> arrayOf(TextAppearanceSpan(context, R.style.H4Style))
                        5 -> arrayOf(TextAppearanceSpan(context, R.style.H5Style))
                        6 -> arrayOf(TextAppearanceSpan(context, R.style.H6Style))
                        else -> arrayOf()
                    }
                    textAppearanceSpans
                }

            }
        })
        .build()

    if(text.isNotBlank()){
        val markdown = markwon.toMarkdown(text)
        markwon.setParsedMarkdown(textView, markdown)
        textView.visibility = View.VISIBLE
    }else{
        textView.visibility = View.GONE
    }
}

感谢您的帮助!

我尝试在 textView 上设置 setLineSpacing() 并尝试为每个跨度样式设置它,但它不起作用。 我希望在 Markwon 库中找到一种方法或插件,允许我在渲染 Markdown 时在文本行之间添加额外的空间,类似于我们在标准 TextView 中调整 lineSpacing 的方式。

android kotlin textview markdown markwon
1个回答
0
投票

您可以通过重写 MarkwonVisitor.Builder 并应用 AbsoluteSizeSpan 来控制行之间的间距来自定义行间距。

这是完整的实现:

fun textToMarkdown(context: Context, text: String, textView:AppCompatTextView){
val dip4 = (context.resources.displayMetrics.density * 4 + .5F).toInt() //span line distance for formatted text
val markwon = Markwon.builder(context)
    .usePlugin(SoftBreakAddsNewLinePlugin.create())
    .usePlugin(object : AbstractMarkwonPlugin() {
        override fun configureVisitor(builder: MarkwonVisitor.Builder) {
            builder.on(Heading::class.java) { visitor, heading ->
                //set line distance
                visitor.ensureNewLine()
                val length = visitor.length()
                visitor.visitChildren(heading)
                CoreProps.HEADING_LEVEL.set(visitor.renderProps(), heading.level)
                visitor.setSpansForNodeOptional(heading, length)
                if (visitor.hasNext(heading)) {
                    // save current index
                    val start = visitor.length()
                    visitor.ensureNewLine()
                    visitor.forceNewLine()
                    // apply AbsoluteSizeSpan to new-line character
                    visitor.setSpans(start, AbsoluteSizeSpan(dip4))
                }
            }

        }... your code ...

此方法可确保在渲染的 Markdown 内容中需要时专门应用额外的行距。

让我知道该解决方案是否适合您或者您是否需要进一步说明!

© www.soinside.com 2019 - 2024. All rights reserved.