目录
12.3 滑动菜单
滑动菜单可以说是 Material Design 中最常见的效果之一了,许多 Google 自家的应用(如 Gmail 、Google Photo 等)具有滑动菜单的功能。虽说这个功能看上去好像挺复杂的,不过借 助Google 提供的各种工具,我们可以很轻松地实现非常炫酷的滑动菜单效果,那么我们马上开 始吧。
12.3.1 DrawerLayout
所谓的滑动菜单,就是将一些菜单选项隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来。这种方式既节省了屏幕空间,又实现了非常好的动画效果,是 Material Design 中推荐的做法。
不过,如果我们全靠自己去实现上述功能的话,难度恐怕就很大了。幸运的是,Google 在 AndroidX库中提供了一个 DrawerLayout 控件,借助这个控件,实现滑动菜单简单又方便。
先来简单介绍一下 DrawerLayout 的用法吧。首先它是一个布局,在布局中允许放入两个直接 子控件:第一个子控件是主屏幕中显示的内容,第二个子控件是滑动菜单中显示的内容。因此,我们就可以对 activity_main.xml 中的代码做如下修改:
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layot_gravity='start'
android:background="#FFF"
android:text="This is menu"
android:textSize="30sp"/>
</androidx.drawerlayout.widget.DrawerLayout>
可以看到,这里最外层的控件使用了DrawerLayout 。DrawerLayout 中放置了两个直接子控 件:第一个子控件是FrameLayout ,用于作为主屏幕中显示的内容,当然里面还有我们刚刚定义的Toolbar ;第二个子控件是一个TextView ,用于作为滑动菜单中显示的内容,其实使用什 么都可以,DrawerLayout 并没有限制只能使用固定的控件。
但是关于第二个子控件有一点需要注意,layout_gravity 这个属性是必须指定的,因为我们 需要告诉 DrawerLayout 滑动菜单是在屏幕的左边还是右边,指定 left 表示滑动菜单在左边,指定right 表示滑动菜单在右边。这里我指定了 start ,表示会根据系统语言进行判断,如果系统语言是从左往右的,比如英语、汉语,滑动菜单就在左边,如果系统语言是从右往左的,比如阿拉伯语,滑动菜单就在右边。
没错,只需要改动这么多就可以了,现在重新运行一下程序,然后在屏幕的左侧边缘向右拖 动,就可以让滑动菜单显示出来了,如 图12.5 所示。
向左滑动菜单,或者点击一