多行Textview 计算切分后的长度,并回退长度

实现类似的效果,一个多行的 textview, 如果赋值一个超长的字符,尾部长度回退部分,并添加 ... 最后添加一个详情按钮。 如果不超长则不显示详情

效果如图:

获取截断之后的字符长度

    fun getLimitedCharacterCount(textView: TextView, lineCount: Int): Int {
        val layout = textView.layout

        if (layout != null && layout.lineCount >= lineCount - 1) {
            return layout.getLineEnd(lineCount - 1)
        }
        return 0
    }

 获取到被切分的长度之后,退位部分字符串,绘制更多 UI

val str = "xxxxxxxxxxxxxxxxxxxxxxxxx"
mTextview.text = str

viewModelScope.launch {
                delay(200) // 延迟 300 毫秒,需要等待 textview 绘制
                // 发起协程
                // 获取被截取后的文字长度
                val limitedCount: Int = getLimitedCharacterCount(mTextview, mTextview.maxLines)

                // 需要提前删除的文字的数量(用于补充更多以及... 的距离)
                val DEL_TEXT_COUNT = 4
       
                withContext(Dispatchers.Main) {
                    if (ellipsisCount > 0 && ellipsisCount < str.length && limitedCount> DEL_TEXT_COUNT) {
                        // 被切分
                        str= str.substring(0, limitedCount- DEL_TEXT_COUNT) + "..."
                        mTextview.text = info
                        // 显示更多按钮
                        mMore.visibility = View.VISIBLE
                    } else {
                        mMore.visibility = View.INVISIBLE
                    }
                }
            }

这里其实可以做的更好,不做固定长度,而是计算 subString 的实际 width,确定需要删减的字符串。这样效果会更好,然后这里偷懒了,后面再补

相关推荐

  1. 计算最长字符串长度

    2024-04-27 06:16:04       41 阅读
  2. 递归实现字符串长度计算

    2024-04-27 06:16:04       34 阅读
  3. 将List切割个指定长度个List

    2024-04-27 06:16:04       27 阅读
  4. go 切片长度与容量区别

    2024-04-27 06:16:04       57 阅读
  5. go | 切片长度和容量

    2024-04-27 06:16:04       34 阅读
  6. Oracle 中怎么计算中文字符长度

    2024-04-27 06:16:04       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-27 06:16:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-27 06:16:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-27 06:16:04       82 阅读
  4. Python语言-面向对象

    2024-04-27 06:16:04       91 阅读

热门阅读

  1. mxnet gluon GRU 文档

    2024-04-27 06:16:04       34 阅读
  2. Linux:使用ssl加密网站为https

    2024-04-27 06:16:04       35 阅读
  3. ttcp测试网络吞吐量

    2024-04-27 06:16:04       41 阅读
  4. Nginx安装withSSL模块

    2024-04-27 06:16:04       37 阅读
  5. Socket套接字(TCP流)篇

    2024-04-27 06:16:04       37 阅读
  6. C++ std::variant 总结

    2024-04-27 06:16:04       34 阅读
  7. 新媒体矩阵号是怎么做的?

    2024-04-27 06:16:04       34 阅读
  8. flask服务中如何request获取请求的headers信息

    2024-04-27 06:16:04       33 阅读
  9. Python Web开发框架详解:Django与Flask的比较与实践

    2024-04-27 06:16:04       44 阅读