如何将视图滚动到屏幕顶部

4

我在android NestedScrollView中有一个EditText,当它被聚焦时,我希望它回到顶部,类似于这样:

enter image description here

我尝试了:

平滑滚动/滚动到指定像素, 平滑滚动/滚动到视图顶部(或底部)

但都没有起作用,也不会一致地响应。

编辑:

我弄明白了,将问题留下以备记录目的。

我使用以下代码获取了ScrollView的大小

scrollView.getBottom();

然后使用以下方法滚动到所需位置:

scrollView.scrollTo(0,2*scrollView.getBottom()/5); //size will vary from view to view

你想让它到达布局的顶部吗?是布局中的第一个元素吗? - grrigore
没错!那将会很棒。 - Carlos Mion
你能发布你的布局吗? - grrigore
我明白了,已经编辑了我的答案。谢谢! - Carlos Mion
2个回答

1
也许你的scrollView还没有足够的时间来计算它的大小?你尝试过以下方法吗:
scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.scrollTo(0, 0);
    }
});

现在我会尝试,你能告诉我更多为什么它没有时间计算自己的大小吗? - Carlos Mion
scrollView.post(Runnable { scrollView.scrollTo(0, 0) }) 滚动视图.发布(Runnable { 滚动视图.滚动到(0, 0) }) - tbfp

1

对于其他需要解决方案的人,这里是:

/**
     * This function will scroll and bring a view to the top of scrollView
     *
     * @param view target view
     */
    public static void scrollToView(View rootView, ScrollView scrollView, View view) {
        rootView.clearFocus();

        int[] locationOfView = new int[2];
        view.getLocationOnScreen(locationOfView);
        int viewY = locationOfView[1];

        int[] locationOfScrollView = new int[2];
        scrollView.getLocationOnScreen(locationOfScrollView);
        int scrollY = locationOfScrollView[1];

        scrollView.post(() -> scrollView.smoothScrollTo(0, viewY + scrollView.getScrollY() - scrollY));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接