Android ActionBar скрыть/показать при просмотре списка прокрутки
Я хочу скрыть/показать панель действия совместимости, когда пользователь прокручивает вверх/вниз список. Когда панель действий исчезнет, список также займет место в панели действий.
Я следил за подходом, но он порождает уродливое мерцание. У кого-нибудь есть правильное решение этой проблемы? Желаемое поведение похоже на механизм hide/show в приложении Google+ (меня не интересует нижний колонтитул).
То, что я пробовал, представлено ниже:
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (!tabletSize) {
final ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
lvNews.setOnScrollListener(new AbsListView.OnScrollListener() {
private int mLastFirstVisibleItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (mLastFirstVisibleItem < firstVisibleItem) {
if (actionBar.isShowing()) {
actionBar.hide();
}
}
if (mLastFirstVisibleItem > firstVisibleItem) {
if (!actionBar.isShowing()) {
actionBar.show();
}
}
mLastFirstVisibleItem = firstVisibleItem;
}
});
}
Ответы
Ответ 1
Чтобы избежать мерцания, вызванного перенастройкой макета, вы можете использовать свойство overlaying в панели действий.
https://developer.android.com/training/basics/actionbar/overlaying.html
Но это решение заставляет панель действий накладывать ваш список, поэтому вам нужно добавить заголовок такого размера:
"?android:attr/actionBarSize"
например:
mVideosListView = (ListView) getActivity().findViewById(android.R.id.list);
mVideosListView.addHeaderView(getActivity().getLayoutInflater().inflate(R.layout.listview_header,null));
Будьте осторожны с другими элементами, такими как навигационный ящик, на который также влияет это.
Ответ 2
Вам нужно сделать панель действий наложением списка. Делая это, вы несете ответственность за управление скрытием и отображением панели действий, когда это необходимо.
На следующей странице приведен пример:
http://www.techrepublic.com/article/pro-tip-maximize-android-screen-real-estate-by-showing-and-hiding-the-action-bar/
Ответ 3
вы можете попробовать эту библиотеку. Надеюсь, что это поможет https://github.com/ksoichiro/Android-ObservableScrollView
Ответ 4
См. мой ответ по этой ссылке: Как скрыть и показать Android ActionBar, как в приложении Google Inbox?
Я использую RecyclerView, но идея та же