【发布时间】:2011-03-23 21:40:39
【问题描述】:
是否可以隐藏屏幕顶部边缘的视图,并且仅在用户向上滚动时才显示?
我的第一次尝试使用了滚动视图,但似乎除非我使用 postDelayed(它甚至不适用于 Post()),否则 scrollTo() 似乎不起作用。我尝试将它添加到滚动视图的视图树观察器 onPreDraw() 事件中,除非我延迟它,否则它仍然无法工作,因此首次启动活动时会出现一个丑陋的故障。
第二个问题是,如果屏幕键盘被最小化,视图不再需要滚动,因此使用滚动偏移量隐藏内容不再有效。我想过在代码中操纵高度,但这似乎很骇人听闻。
有比使用滚动视图更好的方法吗?或者,是否有人对放置 scrollTo 的最佳位置有任何提示(onCreate 的末尾不起作用,我尝试过的其他地方也不起作用)所以我不需要使用 postDelayed?这至少会消除一个故障。
谢谢!
这是我现在正在使用的代码,这是最少的故障,但我不明白为什么它直到第三次调用 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;
}
});
我也尝试使用下面提到的自定义滚动视图,但这并不能解决图形故障问题:
@Override
public void onMeasure(int measureWidthSpec, int measureHeightSpec) {
super.onMeasure(measureWidthSpec, measureHeightSpec);
Log.v("Testing", "Scrolling");
post(
new Runnable()
{
public void run()
{
scrollTo(0, 100);
Log.v("Testing", "ScrollY = " + getScrollY());
}
});
}
此代码与上面的 onPreDraw() 代码一样工作,但在启动 Activity 时仍然存在故障,因为该 Activity 是在滚动为 0 时首次绘制的。
【问题讨论】:
标签: android android-layout scrollview