可以在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要注意几点:
-
主内容视图一定要是DrawerLayout的第一个子视图。 就如官方代码的那样,app_bar_main是主内容视图,那么他一定要放到代码的第一个视图才行,放到前面。
-
主内容视图宽度和高度需要match_parent
-
必须显示指定侧滑视图的android:layout_gravity属性 android:layout_gravity = "start"时,从左向右滑出菜单 android:layout_gravity = "end"时,从右向左滑出菜单 不推荐使用left和right!!!
-
设置侧滑事件:mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListener);
-
要说一点:可以结合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();
-
如何隐藏 那个按钮(点击它滑出侧滑栏),将上面代码中的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();
-
还有很多自定义的属性,详细设置。
-
这个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,看起来好看而已。
网友评论