Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:隐藏屏幕顶部边缘的视图_Android_Android Layout_Scrollview - Fatal编程技术网

Android:隐藏屏幕顶部边缘的视图

Android:隐藏屏幕顶部边缘的视图,android,android-layout,scrollview,Android,Android Layout,Scrollview,是否有可能隐藏屏幕顶部边缘的视图,并且仅当用户向上滚动时才显示 我的第一次尝试使用了scrollview,但似乎scrollTo()不起作用,除非我使用postDelayed(它甚至不适用于Post())。我尝试将它添加到scrollview的视图树observer onPreDraw()事件中,但除非我延迟它,否则它仍然无法工作,因此在首次启动活动时出现了一个严重的故障 第二个问题是,如果最小化屏幕键盘,视图就不再需要滚动,因此使用滚动偏移量隐藏内容就不再有效。我曾考虑过在代码中操纵高度,但这

是否有可能隐藏屏幕顶部边缘的视图,并且仅当用户向上滚动时才显示

我的第一次尝试使用了scrollview,但似乎scrollTo()不起作用,除非我使用postDelayed(它甚至不适用于Post())。我尝试将它添加到scrollview的视图树observer onPreDraw()事件中,但除非我延迟它,否则它仍然无法工作,因此在首次启动活动时出现了一个严重的故障

第二个问题是,如果最小化屏幕键盘,视图就不再需要滚动,因此使用滚动偏移量隐藏内容就不再有效。我曾考虑过在代码中操纵高度,但这似乎很老土

有没有比使用scrollview更好的方法?或者,是否有人有任何关于放置滚动条的最佳位置的提示(onCreate的末尾不起作用,也没有我尝试过的其他位置),因此我不需要使用postdayed?这至少可以消除一个小故障

谢谢

这就是我现在正在使用的代码,这是最不容易出错的代码,但我不明白为什么直到第三次调用onPreDraw()时它才起作用

mScrollView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener()
    {
        @Override
        public boolean onPreDraw()
        {
            final int fieldYStart = mFieldIWantAtTheTop.getTop();

            if (mFieldIWantAtTheTopYStart != fieldYStart
             || mScrollView.getScrollY() < 10)
            {
                mFieldIWantAtTheTopYStart = fieldYStart;

                mScrollView.post(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        Log.v("Testing", "scrolling!");
                        mScrollView.scrollTo(0, mFieldIWantAtTheTopYStart);
                        Log.v("Testing", "scroll is now=" + mScrollView.getScrollY());
                    }
                });
            }


            return true;
        }
    });

此代码与上面的onPreDraw()代码一样工作,但在启动活动时仍然存在小故障,因为活动第一次绘制时滚动值为0。

我还没有尝试过此操作,但您可能希望创建自定义滚动视图并覆盖
onMeasure

ScrollView scroll = new ScrollView(this) {
    @Override
    public void onMeasure(int measureWidthSpec, int measureHeightSpec) {
        super.onMeasure(measureWidthSpec, measureHeightSpec);
        scrollTo(...);
    }
};
这似乎是
scrollTo
最早有效的一点


编辑-我发现,这显然对询问者有效。这是您尝试过的方法吗?

我没有尝试过,但您可能希望创建一个自定义滚动视图,并覆盖测量上的

ScrollView scroll = new ScrollView(this) {
    @Override
    public void onMeasure(int measureWidthSpec, int measureHeightSpec) {
        super.onMeasure(measureWidthSpec, measureHeightSpec);
        scrollTo(...);
    }
};
这似乎是
scrollTo
最早有效的一点


编辑-我发现,这显然对询问者有效。这是您尝试过的方法吗?

是的,基本上,您必须等到第一次布局过程完成后才能滚动滚动视图。Re:链接:这是有效的(我不明白为什么,因为scrollTo()不起作用),但即使我使用post(),也有一个明显的故障。现在我使用的是onPreDraw(),而滚动实际上只在第三次调用时起作用(我在scrollTo调用之后立即使用getScrollY进行检查,直到onPreDraw()#3才起作用,但在这种情况下仍然有一点小故障)。你能尝试一下onMeasure方法吗?我还没有尝试过onMeasure方法,因为我从未在XML和代码中使用过自定义视图,所以我必须先弄清楚。我明天试试看。好的,我试过了。onMeasure被调用了六次,每次我调用scrollTo(0100),但是当我检查Y值时,在scrollTo调用之后仍然是0。然后,我尝试了同样的方法,将scrollTo()调用包装在post()中,它可以工作,但问题与以前相同。在看到活动“跳转”到新位置的开始处有一个明显的小故障。是的,基本上,在滚动ScrollView之前,您必须等待第一个布局过程完成。Re:链接:这是有效的(我不明白为什么,因为scrollTo()不起作用),但即使我使用了post(),也有一个明显的小故障。现在我使用的是onPreDraw(),而滚动实际上只在第三次调用时起作用(我在scrollTo调用之后立即使用getScrollY进行检查,直到onPreDraw()#3才起作用,但在这种情况下仍然有一点小故障)。你能尝试一下onMeasure方法吗?我还没有尝试过onMeasure方法,因为我从未在XML和代码中使用过自定义视图,所以我必须先弄清楚。我明天试试看。好的,我试过了。onMeasure被调用了六次,每次我调用scrollTo(0100),但是当我检查Y值时,在scrollTo调用之后仍然是0。然后,我尝试了同样的方法,将scrollTo()调用包装在post()中,它可以工作,但问题与以前相同。在开始时,您看到活动“跳转”到新位置时,有一个明显的小故障。