How do I use DrawerLayout to display over the ActionBar/Toolbar and under the status bar?

后端 未结 10 835
[愿得一人]
[愿得一人] 2020-11-22 04:05

I\'ve seen in the new material design Side Nav spec that you can display the drawer over the action bar and behind the status bar. How can I implement this?

10条回答
  •  清酒与你
    2020-11-22 04:42

    The above all approaches are correct and may be working . I have created a working demo following the above guide and tested on 2.x to 5.x

    You can clone from Github

    The important thing to play around is in Main Activity

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    res = this.getResources();
    
    this.setSupportActionBar(toolbar);
    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
        ScrimInsetsFrameLayout scrimInsetsFrameLayout = (ScrimInsetsFrameLayout)
                findViewById(R.id.linearLayout);
        scrimInsetsFrameLayout.setOnInsetsCallback(this);
    } 
    

    and the call back

    @Override
    public void onInsetsChanged(Rect insets) {
        Toolbar toolbar = this.toolbar;
        ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams)
            toolbar.getLayoutParams();
        lp.topMargin = insets.top;
        int top = insets.top;
        insets.top += toolbar.getHeight();
        toolbar.setLayoutParams(lp);
        insets.top = top; // revert
    }
    

    Absolutely the Theme for V21 does the magic

    
    

    and the ScrimInsetsFrameLayout

    Now this come more easy with new Design Support library

    compile 'com.android.support:design:22.2.0'
    

    clone from @Chris Banes https://github.com/chrisbanes/cheesesquare

提交回复
热议问题