Можно ли скрыть вид за верхним краем экрана, и он будет отображаться только при прокрутке вверх пользователем?
В моей первой попытке использовалось представление прокрутки, но кажется, что scrollTo ()не работает, если я не использовал postDelayed (он даже не работает с Post ()).Я попытался добавить его в событие 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 (), описанный выше, но при запуске действия все еще наблюдается сбой, поскольку действие сначала отображается с прокруткой на 0.