web-dev-qa-db-ja.com

Androidリストビューのスクロール時にActionBarを非表示/表示

ユーザーがリストビューを上下にスクロールするときに互換性アクションバーを非表示/表示したい。アクションバーが消えると、リストはアクションバーのスペースも占めます。

私はアプローチに従いましたが、醜いちらつきを生成します。誰かがこの問題の適切な解決策を持っていますか?望ましい動作は、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;
            }
        });
    }
14
dorin

レイアウトの再調整によって引き起こされるちらつきを回避するには、アクションバーのoverlayプロパティを使用できます。

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));

この影響を受けるナビゲーションドロワーなどの他の要素にも注意してください。

アクションバーをリストビューにオーバーレイさせる必要があります。これにより、必要に応じてアクションバーを非表示および表示する責任があります。

次のページに例があります: http://www.techrepublic.com/article/pro-tip-maximize-Android-screen-real-estate-by-showing-and-hiding-the-action -bar /

3
Muatik

このライブラリを試すことができます。それが役に立てば幸い https://github.com/ksoichiro/Android-ObservableScrollView

2
TibiG

そのリンクで私の答えを参照してください: Android Google InboxアプリのようなActionBarを非表示および表示する方法 RecyclerViewを使用していますが、考え方は同じです

0