侧滑菜单功能使用的是DrawerLayout + NavigationView的功能实现具体实现方式如下:
修改activity_main.xml的代码如下:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent">
<FrameLayout android:layout_width="match_parent" android:laytou_heigth="matcht_parent"> <android.support.v7.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"/> </android.support.design.widget.AppBarLayout> </FrameLayout>
<TextView android:layout_width="match_parent" android:layout_height="match_parent" layout_gravity="start" android:text="This is menu" android:textSize="30sp" android:background="#FFF"/
</android.support.v4.widget.DrawerLayout>
现在修改MainActivity的代码如下:
public class MainActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBar actionBar = getSupportActionBar(); if (actionBar != null){ //将菜单按钮添加进去 actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.ic_dns_black_24dp); }
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.home: mDrawerLayout.openDrawer(GravityCompat.START); break;//在这个方法中添加一个新的图标功能
现在运行一下代码可以得到简单的侧滑菜单
要使用NavigationView的功能要导入开源库Design Support库具体如下:
compile 'com.android.support:design:26+' compile 'de.hdodenhof:circleimageview:2.1.0'
然后创建相应的nav_menu.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_call" android:icon="@drawable/ic_settings_phone_black_24dp" android:title="Call"/> <item android:id="@+id/nav_friends" android:icon="@drawable/ic_friends_black" android:title="Friends"/> </group> </menu>
再创建一个nav_header.xml的文件用于存放圆形头像框的控件具体代码如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="180dp" android:padding="10dp" android:background="?attr/colorPrimary"> <de.hdodenhof.circleimageview.CircleImageView android:layout_width="70dp" android:layout_height="70dp" android:id="@+id/icon_image" android:src="@mipmap/ic_launcher" android:layout_centerInParent="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/username" android:layout_alignParentBottom="true" android:text="tonygreendev@gamail.com" android:textSize="14sp"/> <TextView android:id="@+id/mail" android:layout_above="@id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tony Green" android:textColor="#fff" android:textSize="14sp"/> </RelativeLayout>
现在在activity_main.xml的文件中导入需要的两个布局文件代码如下:
<android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/nav_menu" app:headerLayout="@layout/nav_header" />这个布局放在DrawerLayout的布局下
然后修改MainActivity的代码如下:
public class MainActivity extends AppCompatActivity { private DrawerLayout mDrawerLayout;
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navView = (NavigationView) findViewById(R.id.nav_view); //初始化控件
ActionBar actionBar = getSupportActionBar(); if (actionBar != null){ //将菜单按钮添加进去 actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.ic_dns_black_24dp); }
navView.setCheckedItem(R.id.nav_call); navView.setNavigationItemSelectedListener(new NavigationView .OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem item) { mDrawerLayout.closeDrawers();
return true;
//在这个方法中添加一个新的图标功能
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.home: mDrawerLayout.openDrawer(GravityCompat.START); break;