android棒棒糖工具栏:如何在滚动时隐藏/显示工具栏?

nom*_*ngo 55 material-design android-5.0-lollipop android-toolbar

我正在使用appcompat/support-v7中引入的新工具栏小部件.我想隐藏/显示工具栏,具体取决于用户是否在页面上下滚动,就像在新的Google Playstore应用程序或NewsStand应用程序中一样.工具栏小部件中是否有内置的东西,或者我应该将它与FrameLayout和ObservableScrollView结合使用?

Kun*_*uno 77

据我所知,没有什么可以为你做的.但是,您可以查看Google IO源代码,尤其是BaseActivity.搜索"自动隐藏"或查看onMainContentScrolled

为了隐藏Toolbar你的可以做这样的事情:

toolbar.animate().translationY(-toolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
Run Code Online (Sandbox Code Playgroud)

如果您想再次显示它,请致电:

toolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
Run Code Online (Sandbox Code Playgroud)


Phi*_*ppe 42

要隐藏工具栏,您可以执行以下操作:

getSupportActionBar().hide();
Run Code Online (Sandbox Code Playgroud)

所以你只需要一个滚动监听器并在用户滚动时隐藏工具栏!


And*_*rey 28

隐藏:

getSupportActionBar().hide();
Run Code Online (Sandbox Code Playgroud)

节目:

getSupportActionBar().show();
Run Code Online (Sandbox Code Playgroud)


Abd*_*man 16

答案很简单.只需OnScrollListener在监听器中实现并隐藏/显示工具栏即可.例如,如果您有listview/recyclerview/gridview,请按照示例进行操作.

在您的MainActivity Oncreate方法中,初始化工具栏.

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
        }
}
Run Code Online (Sandbox Code Playgroud)

然后实施 OnScrollListener

public RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
        boolean hideToolBar = false;
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (hideToolBar) {
                ((ActionBarActivity)getActivity()).getSupportActionBar().hide();
            } else {
                ((ActionBarActivity)getActivity()).getSupportActionBar().show();
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (dy > 20) {
                hideToolBar = true;

            } else if (dy < -5) {
                hideToolBar = false;
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)

我得到了这个想法:https://stackoverflow.com/a/27063901/1079773