DrawerLayout 的使用

作者: galafan | 来源:发表于2018-07-19 12:57 被阅读0次

    2018-07-19

    生命不息,奋斗不止,万事起于忽微,量变引起质变 -------- Hongyang

    什么是 DrawerLayout

    抽屉式导航栏是一个面板,它将应用的主要导航选项显示在屏幕左边缘。大多数情况下,它处于隐藏状态,但是如果用户从屏幕左边缘滑动手指,同时在应用顶层触摸操作栏中的应用图标,它将会显示出来。

    创建布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="false"
        tools:openDrawer="start">
      <!--首页内容-->
        <include
            layout="@layout/content_my"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
      <!--抽屉菜单展示内容-->
        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="220dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            >
               <!--抽屉栏头布局-->
         <include layout="@layout/nav_header_drawer_layout__one" />
                <!--抽屉栏的列表-->        
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <include layout="@layout/nav_header_drawer_layout__one" />
                <ExpandableListView
                    android:id="@+id/lvExp1"
                    android:layout_height="match_parent"
                    android:layout_width="match_parent"
                    android:dividerHeight="0dp"
                    android:background="@color/white"
                    android:childDivider="#eeeeee"
                    android:cacheColorHint="#00000000"
                    android:scrollbarSize="0dp"
                    android:divider="#eeeeee"
                    android:indicatorLeft="0dp"
                    android:indicatorRight="200dp"
                    />
            </LinearLayout>
        </android.support.design.widget.NavigationView>
    
    </android.support.v4.widget.DrawerLayout>
    

    初始化抽屉式导航栏列表

        private ExpandableListView expandableListView;
        private NavigationView nav_view;
        /** 抽屉布局 **/
        private DrawerLayout drawer_layout; 
        private void initViews() {
            nav_view = (NavigationView) findViewById(R.id.nav_view);
            drawer_layout = (DrawerLayout) findViewById(R.id.drawer_layout);
    // 设置DrawerLayout的宽度,以黄金分割比来设置宽度
            DrawerLayout.LayoutParams params = new DrawerLayout.LayoutParams((int) (ScreenUtils.getWidth(this) * 0.618), ViewGroup.LayoutParams.MATCH_PARENT);
            // 设置DrawerLayout起始位置
            params.gravity = Gravity.START;
            nav_view.setLayoutParams(params);
            expandableListView = (ExpandableListView) nav_view.findViewById(R.id.lvExp1);
            expandableListView.setGroupIndicator(null);
        }
    

    侦听打开和关闭事件

    要侦听抽屉式导航栏的打开和关闭事件,请在 DrawerLayout 上调用 setDrawerListener() 并向其传递DrawerLayout.DrawerListener 的实现。此接口为抽屉式导航栏事件(例如,onDrawerOpened()onDrawerClosed())提供了回调。

    drawer_layout.addDrawerListener(new DrawerLayout.DrawerListener() {
                @Override
                public void onDrawerSlide(View drawerView, float slideOffset) {
    
                }
    
                @Override
                public void onDrawerOpened(View drawerView) {
    
                }
    
                @Override
                public void onDrawerClosed(View drawerView) {
    
                }
    
                @Override
                public void onDrawerStateChanged(int newState) {
    
                }
            });
    

    但是,如果您的 Activity 包括操作栏,则可扩展 ActionBarDrawerToggle类,而非实现DrawerLayout.DrawerListenerActionBarDrawerToggle实现了 DrawerLayout.DrawerListener,因此您仍然可以替代这些回调,但这还有助于在操作栏图标与抽屉式导航栏之间正确交互(下一部分中将进一步阐述)。

    正如抽屉式导航栏设计指南中所述,您应在抽屉式导航栏可见时修改操作栏的内容,例如,更改标题和移除与主内容有关的操作项目。 以下代码显示了如何通过使用 ActionBarDrawerToggle 类的实例替代 DrawerLayout.DrawerListener 回调方法来实现这一点:

    
            drawer_layout.addDrawerListener(new ActionBarDrawerToggle(this,drawer_layout,R.mipmap.pick_ic_open,R.mipmap.nav_sousuo){
    
                @Override
                public void onDrawerOpened(View drawerView) {
                    super.onDrawerOpened(drawerView);
                    ToastUtil.showLongToast(MainTableActivity.this,"onDrawerOpened");
                }
    
                @Override
                public void onDrawerClosed(View drawerView) {
                    super.onDrawerClosed(drawerView);
                    ToastUtil.showLongToast(MainTableActivity.this,"onDrawerClosed");
    
                }
            });
    

    更详细的用法参考Android官方文档 >创建抽屉式导航栏

    image

    相关文章

      网友评论

        本文标题:DrawerLayout 的使用

        本文链接:https://www.haomeiwen.com/subject/mlhzpftx.html