Android 开发工具

DrawerLayout 的使用

2018-07-19  本文已影响0人  galafan

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
上一篇 下一篇

猜你喜欢

热点阅读