DrawaLayout(官方正版的策划效果,在v4包)
看下布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.acer.temp_2017_08_13.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/tl_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更多……"/>
</android.support.v7.widget.Toolbar>
<android.support.v4.widget.DrawerLayout
android:id="@+id/dl_drawlerlayout"
android:layout_gravity="start"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#098765">
<!--内容部分-->
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="啊啊啊啊啊啊"/>
</RelativeLayout>
<LinearLayout
android:layout_width="280dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="start"
android:gravity="center_vertical"
android:orientation="vertical">
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
注意“ android:layout_gravity=”start””代码
主内容区的布局代码要放在侧滑菜单布局的前面, 因为 XML 顺序意味着按 z 序(层叠顺序)排序,并且抽屉式导航栏必须位于内容顶部;侧滑菜单部分的布局(这里是LinearLayout)必须设置layout_gravity属性,他表示侧滑菜单是在左边还是右边,而且如果不设置在打开关闭抽屉的时候会报错,设置了layout_gravity=”start/left”的视图才会被认为是侧滑菜单。
看下代码
package com.example.acer.temp_2017_08_13;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
public class MainActivity extends AppCompatActivity {
private Toolbar toolBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolBar = (Toolbar) findViewById(R.id.tl_bar);
//将菜单委托给toolbar
toolBar.inflateMenu(R.menu.mymenu);
//替换actionbar,也可以选择不替换
setSupportActionBar(toolBar);
DrawerLayout drawerLayout= (DrawerLayout) findViewById(R.id.dl_drawlerlayout);
//设置可旋转的导航菜单控件
ActionBarDrawerToggle actionBarDrawerToggle= new ActionBarDrawerToggle(this,drawerLayout,toolBar,R.string.open,R.string.close);
//同步状态,刷新页面
actionBarDrawerToggle.syncState();
}
}
下面我们设置监听,有两种方法
package com.example.acer.temp_2017_08_13;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
public class MainActivity extends AppCompatActivity {
private Toolbar toolBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolBar = (Toolbar) findViewById(R.id.tl_bar);
//将菜单委托给toolbar
toolBar.inflateMenu(R.menu.mymenu);
//替换actionbar,也可以选择不替换
setSupportActionBar(toolBar);
DrawerLayout drawerLayout= (DrawerLayout) findViewById(R.id.dl_drawlerlayout);
//设置可旋转的导航菜单控件
ActionBarDrawerToggle actionBarDrawerToggle= new ActionBarDrawerToggle(this,drawerLayout,toolBar,R.string.open,R.string.close);
//同步状态,刷新页面
actionBarDrawerToggle.syncState();
// DrawerLayout的监听1)自己的监听2)ActionBarDrawerToggle自带监听,会监听侧滑事件,同时对导航菜单设置了旋转效果
//第一种方法
// drawerLayout.addDrawerListener(actionBarDrawerToggle);
//第二种方法
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
}