我正在尝试创建一个计算器。我正在使用最新的Android Studio。与计算器一样,所有新的tokes(数字,运算符)都应显示在右侧,如果字段大于显示,则应滚动到最新的标记。我已经浏览过并找到了一种方法来做同样的事情 相同的代码是:
private void scrollRight() {
horizontalScrollView = (HorizontalScrollView) findViewById(R.id.horizontalScrollView);
ViewTreeObserver viewTreeObserver = horizontalScrollView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
horizontalScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
horizontalScrollView.scrollTo(entry.getWidth(), 0);
}
});
}
scrollRight
由onClick事件调用,该事件检查是否输入了令牌并调用它。
一切都运行良好,即在每个新标记上滚动条滚动到最后。但是,如果我尝试手动滚动到开头,它就不再有效了。每次按下新标记后,滚动条首先移动到结尾,然后返回到开头
剩下的唯一选择是重新启动程序。我尝试调试OnGlobalLayout
函数,但调试器在退出函数时丢失所有帧,因此很难知道滚动条到底是什么。
请帮助!
答案 0 :(得分:2)
尝试
horizontalScrollView.post(new Runnable() {
@Override
public void run() {
horizontalScrollView.fullScroll(View.FOCUS_RIGHT);
}
});
在onCreate中只调用一次findViewById
。