簡體   English   中英

滾動listview時如何隱藏工具欄? (就像谷歌游戲商店)

[英]How to hide toolbar while scrolling listview up? (Just like google play store)

好的,所以隱藏動作欄是可行的。 但是,我們如何在活動中隱藏(新引入的)工具欄?

我正在創建一個主題為theme.apcompat.light.noactionbar的活動的應用程序(隱藏操作欄),我在其下方放置了一個帶有slidingtablayout的工具欄。 下面是我的列表視圖。

我想要的是在滾動列表視圖時隱藏工具欄。 但滑動布局應保持在那里。 如果我在列表視圖的中間向下滾動,則工具欄應該再次可見。

更新(2015年8月24日):

請使用Design Support Library在此處查看我的最新答案:

將ActionBar隱藏在RecyclerView / ListView onScroll上

更新時間(2015年6月2日):

ListView + ToolBar - 沒有庫:

請參閱https://stackoverflow.com/a/26547550/950427https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ ui / BaseActivity.java

mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT >= 16) {
            mToolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            mToolbar.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
        mToolbar.animate().translationY(-mToolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
    }
});

來自: http//pastebin.com/yeMX3VYP

ListView + ActionBar - 沒有庫:

https://stackoverflow.com/a/17767691/950427

我最近想要相同的功能,這對我來說非常有用:

當用戶向上滾動時,ActionBar將被隱藏,以便為用戶提供整個屏幕以便進行工作。

當用戶向下滾動並放開時,ActionBar將返回。

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

listView.setOnScrollListener(new OnScrollListener() {
    int mLastFirstVisibleItem = 0;

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {   }           

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {    
        if (view.getId() == listView.getId()) {
            final int currentFirstVisibleItem = listView.getFirstVisiblePosition();

            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                // getSherlockActivity().getSupportActionBar().hide();
                getSupportActionBar().hide();
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                // getSherlockActivity().getSupportActionBar().show();
                getSupportActionBar().show();
            }

            mLastFirstVisibleItem = currentFirstVisibleItem;
        }               
    }
});

使用以下代碼:

ViewCompat.setNestedScrollingEnabled(listView, true);

對於recyclerView我管理它使它像這樣:

public class FragmentsOnScrollListener extends RecyclerView.OnScrollListener {

    private final MainActivity mainActivity;
    private final View bothToolbarLayouts;
    private int approxToolbarHeight;

    public FragmentsOnScrollListener(MainActivity activity) {
        mainActivity = activity;
        bothToolbarLayouts = mainActivity.getBothToolbarLayouts();
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        approxToolbarHeight += dy;
        bothToolbarLayouts.animate().translationY(-approxToolbarHeight).setInterpolator(new AccelerateInterpolator()).start();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM