是否可以將視圖隱藏在屏幕的上邊緣,並且只有在用戶向上滾動時纔會出現?Android:隱藏屏幕上邊緣的視圖
我第一次嘗試使用scrollview,但似乎scrollTo()不工作,除非我使用postDelayed(它甚至不適用於Post())。我試着將它添加到scrollview的view tree觀察者onPreDraw()事件中,除非我延遲它,否則它不起作用,所以當活動首次啓動時會出現一個醜陋的故障。
第二個問題是,如果屏幕鍵盤被最小化,視圖不再需要滾動,因此使用滾動偏移隱藏事物不再有效。我考慮過在代碼中操縱高度,但這看起來很駭人。
有沒有更好的方法來做到這一點比使用scrollview?或者,有沒有人有最好的地方放置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()的代碼,但有仍然是在活動啓動,因爲活動是與滾動爲0
是的,基本上,您必須等到第一個佈局傳遞完成後再滾動ScrollView。 – 2011-03-23 22:19:33
(提前命中輸入) – Kevin 2011-03-23 22:19:53
Re:鏈接:這工作(我不明白爲什麼,因爲scrollTo()不起作用),但即使我使用post()也有明顯的故障。現在我正在使用onPreDraw(),滾動實際上只能在第三個調用中工作(我在scrollTo調用後立即用getScrollY檢查,直到onPreDraw()#3才工作,但在這種情況下仍然存在一個小故障)。 – Kevin 2011-03-23 22:20:59