使用actionBar实现侧滑菜单
actionBar侧滑菜单是谷歌官方的模版,有着很多限制比如图标固定,菜单样式固定,但是如果只是实现简单的侧滑菜单,使用这个还是不错的。
使用5.0兼容库 选择file>project Structure>module(自己开发module)>Dependencies>点击右上角+号>LibraryDependency>选择com.android.support:design:25.1.0
1、首先实现布局页面
<?xml version="1.0" encoding="utf-8"?>
<!--菜单布局-->
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_sliding_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="主界面"/>
</LinearLayout>
<android.support.design.widget.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_head_layout"
app:menu="@menu/nav_menu_list">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
布局写好后在 android.support.design.widget.NavigationView 控件下 需要添加2个属性分别对应2个布局文件。app:menu=”@menu/nav_menu_list”>需要填充布局作为侧滑的滑出页面布局代码如下(注意这里是xml文件,并且需要在‘src>main>res’文件夹下新建‘menu’文件夹然后再新建xml文件)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!--创建子菜单-->
<group
android:id="@+id/group01"
>
<item
android:id="@+id/string1"
android:icon="@mipmap/ic_launcher"
android:title="我是菜单1"
></item>
<item
android:icon="@mipmap/ic_launcher"
android:title="我是菜单2"
></item>
</group>
<group
android:id="@+id/group02"
>
<item
android:icon="@mipmap/ic_launcher"
android:title="我是菜单A"
></item>
<item
android:icon="@mipmap/ic_launcher"
android:title="我是菜单B"
>
<menu>
<item android:title="B的子菜单"></item>
</menu>
</item>
</group>
</menu>
上面的group标签是给侧滑菜单下的菜单添加子菜单的注意只有在添加id的情况下才可以看见效果。app:headerLayout=”@layout/nav_head_layout” 布局文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="@drawable/ic_user_background"
android:layout_height="150dp">
<ImageView
android:id="@+id/iv_head_layout_icon"
android:layout_margin="10dp"
android:layout_width="48dp"
android:src="@drawable/ic_account_circle_white_48dp"
android:layout_height="48dp"/>
<TextView
android:layout_margin="10dp"
android:layout_width="wrap_content"
android:text="点击登陆"
android:textColor="#FFF"
android:layout_height="wrap_content"/>
</LinearLayout>
布局写好后,在activity写开始写逻辑
package com.example.newdatas.androidBase;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.Toast;
import com.example.newdatas.R;
import butterknife.Bind;
import butterknife.ButterKnife;
public class SlidingMenu extends AppCompatActivity {
@Bind(R.id.activity_sliding_menu)
DrawerLayout mActivitySlidingMenu;
@Bind(R.id.NavigationView)
NavigationView mNavigationView;
private ActionBarDrawerToggle mActionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sliding_menu);
ButterKnife.bind(this);
// 初始化actionbar
initActionBar();
//设置Navigation的点击事件
mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.string1:
Toast.makeText(SlidingMenu.this, "ssss", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
private void initActionBar() {
// 拿到actionbar
ActionBar supportActionBar = getSupportActionBar();
// 设置标题
supportActionBar.setTitle("标题");
// 显示箭头 固定写法 显示并且可以先显示
supportActionBar.setDefaultDisplayHomeAsUpEnabled(true);
supportActionBar.setDisplayHomeAsUpEnabled(true);
// 显示汉堡箭头
// 菜单开关对象
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mActivitySlidingMenu, R.string.open, R.string.a);
// 进行同步
mActionBarDrawerToggle.syncState();
// 设置点击事件
mActivitySlidingMenu.addDrawerListener(mActionBarDrawerToggle);
}
// 设置点击事件
// slelct
// 复写方法ctrl+a
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// 箭头对象
case android.R.id.home:
// 拿到菜单箭头对象
mActionBarDrawerToggle.onOptionsItemSelected(item);
break;
}
return super.onOptionsItemSelected(item);
}
}
最后完成后的样子