Android Design Support Library(二)用NavigationView实现抽屉菜单界面
来源:互联网 发布:学unity3d还是虚幻4 编辑:程序博客网 时间:2024/06/06 17:45
NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。这次,在Android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。
这次我们写的代码在Android用TabLayout实现类似网易选项卡动态滑动效果这篇文章代码的基础上进行修改,所以最好先看看上面这篇文章
首先仍旧是配置build.gradle:
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:design:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' compile 'com.android.support:cardview-v7:22.2.0'}
‘com.android.support:design:22.2.0’com.android.support:design:22.2.0就是我们需要引入的Android Design Support Library,其次我们还引入了Recyclerview和Cardview。
主界面布局(activity_tab_layout.xml)
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout android:id="@+id/dl_main_drawer" 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"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".TabLayoutActivity" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="#ADBE107E" app:tabMode="scrollable"/> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/></LinearLayout> <android.support.design.widget.NavigationView android:id="@+id/nv_main_navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_header" app:menu="@menu/drawer_view"/></android.support.v4.widget.DrawerLayout>
DrawerLayout标签包含了主界面的布局以及抽屉的布局,NavigationView标签下app:headerLayout=”” 可以引入头部文件
app:menu=”“则引入菜单的布局。
头部布局文件(navigation_header.xml)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="150dp" android:background="?attr/colorPrimaryDark" android:orientation="horizontal" android:theme="@style/ThemeOverlay.AppCompat.Dark"> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center_vertical" android:layout_marginLeft="50dp" android:background="@drawable/ic_user"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_gravity="center_vertical" android:text="Liuwangshu" android:textAppearance="@style/TextAppearance.AppCompat.Body1" android:textSize="20sp"/></LinearLayout>
菜单布局文件(drawer_view.xml)
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_dashboard" android:title="首页"/> <item android:id="@+id/nav_messages" android:icon="@drawable/ic_event" android:title="事项"/> <item android:id="@+id/nav_friends" android:icon="@drawable/ic_headset" android:title="音乐"/> <item android:id="@+id/nav_discussion" android:icon="@drawable/ic_forum" android:title="消息"/> </group> <item android:title="其他"> <menu> <item android:icon="@drawable/ic_dashboard" android:title="设置"/> <item android:icon="@drawable/ic_dashboard" android:title="关于我们"/> </menu> </item></menu>
来看看主界面的java代码(TabLayoutActivity.java)
package com.example.liuwangshu.mytablayout;import android.support.design.widget.NavigationView;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.view.GravityCompat;import android.support.v4.view.ViewPager;import android.support.v4.widget.DrawerLayout;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.view.Menu;import android.view.MenuItem;import java.util.ArrayList;import java.util.List;public class TabLayoutActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout; private ViewPager mViewPager; private TabLayout mTabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab_layout); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar ab = getSupportActionBar(); ab.setHomeAsUpIndicator(R.drawable.ic_menu); ab.setDisplayHomeAsUpEnabled(true); mViewPager = (ViewPager) findViewById(R.id.viewpager); mDrawerLayout = (DrawerLayout) findViewById(R.id.dl_main_drawer); NavigationView navigationView = (NavigationView) findViewById(R.id.nv_main_navigation); if (navigationView != null) { navigationView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { menuItem.setChecked(true); mDrawerLayout.closeDrawers(); return true; } }); } initViewPager(); }
navigationView.setNavigationItemSelectedListener对菜单的条目进行了监听,如果被点击则将条目设置为选中状态并收回抽屉。当然别忘了对toolbar的菜单选项进行监听回调,否则抽屉就出不来了。
(TabLayoutActivity.java)
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: mDrawerLayout.openDrawer(GravityCompat.START); return true; } return super.onOptionsItemSelected(item); }
最后运行程序来看看效果
github源码下载
- Android Design Support Library(二)用NavigationView实现抽屉菜单界面
- Android Design Support Library(二)用NavigationView实现抽屉菜单界面
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- (转)Android 自己实现 NavigationView [Design Support Library(1)]
- Android 自己实现 NavigationView [Design Support Library(1)]
- Android Material Design: NavigationView抽屉导航菜单
- Design Support Library---->NavigationView
- android design support library——NavigationView
- Android Support Design Library之NavigationView
- Android Support Design Library之NavigationView
- Android Design Support Library之NavigationView
- Android Design Support Library初探,NavigationView实践
- Android Design Support Library初探,NavigationView实践
- Android 自定义View -- 简约的折线图
- 本地图片加载
- 通过AudioManager 设置调整系统各项音量(铃声 媒体等)
- Eclipse Class Decompiler——Java反编译插件
- 基于RTP的FEC前向丢错算法简介
- Android Design Support Library(二)用NavigationView实现抽屉菜单界面
- 定义一个函数,在该函数中可以实现任意两个整数的加法。java实现
- JavaScript练习二之Tabs
- LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR的区分与转化
- RabbitMQ message bus的安装和入门
- ecshop常用模板解析
- 19.cocos2d-x获取当前时间
- BLOCK相关
- android系统各种音量的获取与设置