当前位置:   article > 正文

Android NoteX Q6: 如何实现一行文本居中多行文本左对齐效果?_android 1行居中,2行上对齐

android 1行居中,2行上对齐

一 背景

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()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出:

行数为->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();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

三 解决方案

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

binding.textView.apply {
    addTextChangedListener {
        gravity = if (lineCount > 1) Gravity.START else Gravity.CENTER
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5

延伸

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/242795
推荐阅读
相关标签
  

闽ICP备14008679号