美文网首页Android
DrawerLayout 和 NavigationView到底是

DrawerLayout 和 NavigationView到底是

作者: 小星star | 来源:发表于2019-01-22 17:29 被阅读104次

可以在android studio上很快新建一个侧滑布局
DrawerLayout 抽屉布局

NavigationView 怎么翻译我也不清楚,导航栏?
那么它指的是那一部分呢?
点击侧滑按钮之后,出现的一个新页面,这个新页面就是 Navigation
(对照下方官方代码)


image.png

官方的DrawerLayout是这么写的

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!--一个NavigationView由一个header和一个main_drawer组成-->
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

使用DrawerLayout要注意几点:

  1. 主内容视图一定要是DrawerLayout的第一个子视图。 就如官方代码的那样,app_bar_main是主内容视图,那么他一定要放到代码的第一个视图才行,放到前面。

  2. 主内容视图宽度和高度需要match_parent

  3. 必须显示指定侧滑视图的android:layout_gravity属性 android:layout_gravity = "start"时,从左向右滑出菜单 android:layout_gravity = "end"时,从右向左滑出菜单 不推荐使用left和right!!!

  4. 设置侧滑事件:mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener);

  5. 要说一点:可以结合Actionbar使用当用户点击Actionbar上的应用图标,弹出侧滑菜单! 这里就要通过ActionBarDrawerToggle,它是DrawerLayout.DrawerListener的具体实现类, 我们可以重写ActionBarDrawerToggle的onDrawerOpened()和onDrawerClosed()以监听抽屉拉出 或隐藏事件!

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    
  6. 如何隐藏 那个按钮(点击它滑出侧滑栏),将上面代码中的toolbar删掉, 他的默认是,只要你将toobar绑定到 drawer,那么你的toobar就会出现那个按钮。

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    
  7. 还有很多自定义的属性,详细设置。

  8. 这个DrawerLayout一定要配合Navigation吗?
    不!其实那个navigationView就是一个导航页面,由官方布局,命名,我们能用一个ListView来代替他的代码,实现差不多的功能。

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/ly_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/list_left_drawer"
        android:layout_width="180dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#080808"
        android:choiceMode="singleChoice"
        android:divider="#FFFFFF"
        android:dividerHeight="1dp" />

</android.support.v4.widget.DrawerLayout>
image.png

所以,这个NavigationView只是一种布局格式,上面有header,下面是menu,看起来好看而已。

相关文章

网友评论

    本文标题:DrawerLayout 和 NavigationView到底是

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