天天看点

Android TextView垂直滚动,并精准定位到最后一行1. 问题提出2.无法精准定位的产生原因3. 解决方案

文章目录

  • 1. 问题提出
  • 2.无法精准定位的产生原因
  • 3. 解决方案

1. 问题提出

在使用TextView垂直滚动添加内容,并自动定位到最后一行时,往往会出现TextView没有办法精准定位的情况,并且随着内容的增加,定位根本就不对。经过多方查找资料,终于解决现将方法记录如下

2.无法精准定位的产生原因

在测试中,我们发现

TextView getLineCount()*getLineHeight() != getHeight()

,因此如果我们按照网上大多数教程的写法

int offset = textView.getLineCount() * textView.getLineHeight();
if (offset > textView.getHeight()) {
    textView.scrollTo(0, offset - textView.getHeight());
}
           

这样的话,TextView的内容每增加一行,定位就越不精准。

3. 解决方案

知道了问题所在,我们只需要获取TextView的真实高度即可,如下面的写法:

private int getTextViewHeight(TextView view) {
   Layout layout = view.getLayout();
   int desired = layout.getLineTop(view.getLineCount());
   int padding = view.getCompoundPaddingTop() + view.getCompoundPaddingBottom();
   return desired + padding;
}
           

然后这样调用

int offset = getTextViewHeight(textView);
if (offset > textView.getHeight()) {
    textView.scrollTo(0, offset - textView.getHeight());
}
           

以上解决方案,来源于:stackoverflow论坛,遇到问题,还是得去国外论坛找答案靠谱。