简单导航抽屉(Navigation Drawer)
来源:互联网 发布:淘宝网针织衫大外套 编辑:程序博客网 时间:2024/05/22 19:00
在谷歌2015的I/O大会上,发布了许多新的东西。一个特别吸引我的东西便是Design Support Library。这里我将教你毫不费力地添加一个具有Material Design风格的导航抽屉,并且可以处理抽屉的单击事件和手机方向改变如何处理。下面先看一下以前的抽屉导航和现在的抽屉导航
然后我们今天做的效果图如下
添加Design Support Library
我们将在你的Gradle中添加一个独立的库作为开始。
compile 'com.android.support:design:22.2.0'
由于这个库是基于AppCompat和support-v4 library的,所以我们可以完全用这个库代替他们
导航抽屉的布局
打开你的activityXML布局并且按以下结构布局
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <!-- your content layout --> <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/drawer_header" app:menu="@menu/drawer" /></android.support.v4.widget.DrawerLayout>
基于此,我们用<includelayout="@layout/toolbar"/>再添加一个Toolbar,因为我们可以通过Toolbar的汉堡菜单来打开抽屉导航
注意这个新的NavigationView,是来自于Design Support Library。你可以给它定义头布局和菜单布局
抽屉菜单
跟其他普通的菜单一样,只不过有一点小小的变化。所有的菜单选项必须在一个组内(group),除非你想给菜单选项以组分类。它的checkableBehaviour 属性值必须为single。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/navigation_item_1" android:checked="true" android:icon="@drawable/ic_action_clear" android:title="Item One" /> <item android:id="@+id/navigation_item_2" android:icon="@drawable/ic_action_add" android:title="Item Two" /> </group></menu>
抽屉的头布局
我们给头布局另外创建一个XML文件,其中包括一个简单的ImageView和TextView。当然你可以添加任何东西进去。
- <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="150dp"
- android:orientation="vertical">
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/nav_header_bg"
- android:scaleType="centerCrop"/>
- <TextView
- style="@style/TextAppearance.AppCompat.Subhead"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:layout_margin="16dp"
- android:text="Your Name Here"
- android:textColor="@android:color/white"/>
- </FrameLayout>
布局文件就到这里,开始编写代码
5.设置Activity
打开你的Activity.java我们需要做以下几点
1).初始化Toolbar
2).设置导航抽屉
3).处理cchchochouch抽屉的单击事件
初始化Toolbar
坦率的说,我不喜欢onCreate()杂乱无章,所以我将创建一个方法并在onCreate中调用它
- privatevoidsetUpToolbar(){
- mToolbar =(Toolbar)findViewById(R.id.toolbar);
- if(mToolbar != null){
- setSupportActionBar(mToolbar);
- }
- }
- privatevoidsetUpNavDrawer(){
- if(mToolbar != null){
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- mToolbar.setNavigationIcon(R.drawable.ic_drawer);
- mToolbar.setNavigationOnClickListener(new View.OnClickListener(){
- @Override
- publicvoidonClick(View v){
- mDrawerLayout.openDrawer(GravityCompat.START);
- }
- });
- }
- }
这里我们允许toolbar可以显示主返回菜单选项(就是左上角的返回),但是我们改变它的图标来响应我们自己的抽屉打开的事件。
处理抽屉的单击事件
打开关闭抽屉我们引用DrawerLayout,但是处理菜单列表选项我们用NavigationView
- mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener(){
- @Override
- publicbooleanonNavigationItemSelected(MenuItem menuItem){
- menuItem.setChecked(true);
- switch(menuItem.getItemId()){
- case R.id.navigation_item_1:
- Snackbar.make(mContentFrame,"Item One",
- Snackbar.LENGTH_SHORT).show();
- mCurrentSelectedPosition =0;
- return true;
- case R.id.navigation_item_2:
- Snackbar.make(mContentFrame,"Item Two",
- Snackbar.LENGTH_SHORT).show();
- mCurrentSelectedPosition =1;
- return true;
- default:
- return true;
- }
- }
- })
原文地址(需要翻墙)
- 简单导航抽屉(Navigation Drawer)
- Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)模式
- Android Navigation Drawer(导航抽屉)
- Navigation Drawer(导航抽屉)模式
- Android Navigation Drawer(导航抽屉)
- Android的导航抽屉---Navigation Drawer
- Android 导航抽屉---Navigation Drawer (DrawerLayout)使用
- Navigation Drawer DrawerLayout 安卓导航抽屉
- Android Navigation Drawer(抽屉导航栏视图)
- Android的导航抽屉---Navigation Drawer
- Creating a Navigation Drawer 创建导航抽屉
- Android设计之Navigation Drawer(左侧滑出导航、导航抽屉)
- 创建一个抽屉导航(Creating a Navigation Drawer)
- OC语言(二)
- 获取某个月的第一天和最后一天
- hdoj 1565 方格取数(1) 【状压DP 基础题目】
- NYOJ 745 蚂蚁的难题(二)
- MyEclipse加速。有时候妈妈的myeclipse速度慢的要死。
- 简单导航抽屉(Navigation Drawer)
- Json
- Maven 与 Tomcat7
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- UIView
- 【7.10-7.30】我的“在华信”
- 面向对象思想设计原则
- SDNU 1179.金明的预算方案【NOIP 2006 提高组】【背包问题】【7月30】
- HDU 4940 无源汇带上下界可行流