Android 5.0之后推出了Design新特性,大大方便了开发者,以前编写抽屉使用DrawerLayout,现在使用DrawerLayout包含NavigatorView。NavigationView需要接收几个必要的参数、一个用于显示头部的布局(可选)以及用于建立导向选项的菜单,这些都设置完之后,你就只添加监听选中事件的listener就行了。
(1)在Res文件夹下新建menu文件夹,创建navigator_menu.xml文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".main.widget.MainActivity"> <group android:checkableBehavior="single"> <item android:id="@+id/navigation_item_news" android:icon="@mipmap/ic_launcher" android:checked="true" android:title="NavigatorItem1" /> <item android:id="@+id/navigation_item_images" android:icon="@mipmap/ic_launcher" android:title="NavigatorItem2" /> <item android:id="@+id/navigation_item_weather" android:icon="@mipmap/ic_launcher" android:title="NavigatorItem3" /> <item android:id="@+id/navigation_item_about" android:icon="@mipmap/ic_launcher" android:title="NavigatorItem4" /> </group></menu>头布局可以按照你自己的要求创建 如
<LinearLayout 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="200dp" android:orientation="vertical" android:background="?attr/colorPRimaryDark" android:gravity="center" android:theme="@style/ThemeOverlay.AppCompat.Dark" > <ImageView android:layout_width="72dp" android:layout_height="72dp" android:layout_marginTop="20dp" android:src="@mipmap/ic_launcher" /> <TextView android:layout_marginTop="10dp" android:textSize="18sp" android:layout_width="match_parent" android:gravity="center" android:layout_height="wrap_content" android:text="@string/app_name" android:textAppearance="@style/TextAppearance.AppCompat.Body1"/></LinearLayout>接下来在你的Activity initView()方法中找到控件并设置监听
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close); actionBarDrawerToggle.syncState(); drawerLayout.setDrawerListener(actionBarDrawerToggle); //侧边栏 setupDrawerContent(navigatorView);监听方法
private void setupDrawerContent(NavigationView navigatorView) { navigatorView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { mainPresenter.switchNavigation(item.getItemId()); item.setChecked(true); drawerLayout.closeDrawers(); return true; } }); }activity_main.xml
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" > <android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/appbar" layout="@layout/init_toolbar_title"/> <FrameLayout android:id="@+id/fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/appbar" android:scrollbars="none" android:elevation="5dp" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView android:id="@+id/navigator_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/navigation_header" app:menu="@menu/navigation_menu" /></android.support.v4.widget.DrawerLayout>新闻热点
疑难解答