美文网首页Android开发经验谈Android开发Android NoteX
Android NoteX Q6: 如何实现一行文本居中多行文

Android NoteX Q6: 如何实现一行文本居中多行文

作者: 不会飞的小猪 | 来源:发表于2021-04-15 23:21 被阅读0次

一 背景

UI设计可能会有如题的需求。写几个View效果来叠加就显得繁琐了,那怎么办呢?

二 思路

判断行数来设置gravity呗?
先来探索下获取TextView行数的结果:

fun setTwoLine(view: View) {
Log.d(TAG,"setTwoLine")
binding.textView.text = "这是很多内容这是很多内容这是很多内容这是很多内容"
    printTextViewLine()
}

fun setTwoLineByN(view: View) {
binding.textView.text = "这是很多\n内容"
    printTextViewLine()
}

fun setMultiLine(view: View) {
binding.textView.text = "这是很多内容这是很多内容这是很多内容这是很多内容很多内容很多内容很多内容很多内容很多内容很多内容很多内容"
    printTextViewLine()
}

输出:

行数为->2
行数为->2
行数为->5

看似是符合预期,但是是有特殊情况的。上面的设置高度为wrap_content,宽度固定,如果手动设置lines=2呢?

结果发现原本应该显示5行的内容,在页面仅仅显示两行,但是但是,行数结果输出却为5。
如果是少于或等于设定行数的值,显示和输出的行数均正常。

@android.view.RemotableViewMethod
public void setLines(int lines) {
mMaximum = mMinimum = lines;
mMaxMode = mMinMode = LINES;

requestLayout();
invalidate();
}

从源码看,设置lines意味着max和min的lines值一样了。

三 解决方案

至于上面在设置lines后输出行数值可能异常的情况,因为已经能判定为多行了,所以也没关系。这样就能做行数判断,判断为一行还是多行时则再去设置gravity。
如下所示:

binding.textView.apply {
    addTextChangedListener {
        gravity = if (lineCount > 1) Gravity.START else Gravity.CENTER
    }
}

延伸

如果设置固定行数了,譬如为2,则内容只有一行和有多行的情况下,TextView的高度是不是一样的?
答:不一样,一行的高度还是低一些。上面的案例是一行为142,两行为157。

相关文章

  • Android NoteX Q6: 如何实现一行文本居中多行文

    一 背景 UI设计可能会有如题的需求。写几个View效果来叠加就显得繁琐了,那怎么办呢? 二 思路 判断行数来设置...

  • css技巧

    技巧一 多行文本水平垂直居中,少于一行文本居中,多余一行文本居左(试用于对话提示框) box和center的作用是...

  • Android 问题解析 笔记

    记录平凡,积累不平凡 TextView TextView实现drawable图标大小位置与第一行文本居中[http...

  • 浮动与定位02

    水平居中与垂直居中 水平居中 text-align:center 单行文本居中 单行文本和a链接 padding:...

  • 2016-12-19

    多行文本垂直居中 单行文本居中方式:line-height但是多行文本使用 line-height 的话会出错,就...

  • CSS面试题(一)

    一、垂直居中,多行文本垂直居中? 1、单行文本垂直居中设置高度height和行高line-height,使高度he...

  • CSS居中的多种方式

    CSS实现『垂直居中』的方式 一. 单行文本垂直居中 1️⃣. 使line-height的值等于height的值...

  • 单行文字在安卓下不能垂直居中

    问题:height 与line-height 组合实现单行文字垂直居中,在Android下总是不居中问题 场景: ...

  • 垂直居中的几种实现方式

    七种方式实现垂直居中 代码参考 Line-Height Method 适用范围:单行文本垂直居中 CSS Tabl...

  • CSS居中,css文本截字,超出文本省略号显示

    一、文本居中 1、横向居中 text-aline:center; 2、单行文本垂直居中 line-height:h...

网友评论

    本文标题:Android NoteX Q6: 如何实现一行文本居中多行文

    本文链接:https://www.haomeiwen.com/subject/lqhslltx.html