使用
布局用include加载布局加载左的布局
<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:layout_width="match_parent"
android:id="@+id/dl_main_drawer"
android:layout_height="match_parent"
>
<include layout="@layout/left"></include>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.administrator.kuaisoapp.activity.MainActivity">
<LinearLayout
left布局重要加上 android:layout_gravity="left"属性
<?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="match_parent"
android:layout_gravity="left"
android:background="#fff"
android:orientation="vertical">
<LinearLayout
android:id="@+id/left_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
代码
mDlmaindrawer = (DrawerLayout) findViewById(R.id.dl_main_drawer);
mDlmaindrawer.openDrawer(Gravity.LEFT);//打开策划closeDrawer关闭
屏幕适配
把侧滑布局的父类的宽度改成wrap_content
代码
//侧滑
mDlmaindrawer = (DrawerLayout) findViewById(R.id.dl_main_drawer);
WindowManager wm = this.getWindowManager();//获取屏幕宽高
Display dis = wm.getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
dis.getMetrics(dm);
int width1 = dm.widthPixels/3*2;
int height1 = dm.heightPixels;
LinearLayout.LayoutParams para= new LinearLayout.LayoutParams(width1,height1);
leftLayout = (LinearLayout) findViewById(R.id.left_layout);
leftLayout.setLayoutParams(para); //设置修改后的布局。
demo
抽屉导航的实现步骤非常简单。只要配置好带有抽屉导航的布局就可以实现简单的策划菜单。布局代码如下:
1.android.support.v4.widget.DrawerLayout 做为布局的根标签;
2.代码布局格式:
第一个布局(RelativeLayout)是内容(当抽屉完全隐藏的时候显示的内容布局);
第二个布局(LinearLayout)是左侧菜单;
第三个布局(LinearLayout)是右侧菜单;
通过android:layout_gravity属性设置left(start)和right(end)来控件左右;
//控制打开或关闭 这里是左侧
if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
mDrawerLayout.closeDrawer(Gravity.LEFT);
} else {
mDrawerLayout.openDrawer(Gravity.LEFT);
}
3.抽屉布局的宽度最好不要超过320dp,这样做为了当抽屉完全显示的时候,不至于把内容布局全部遮挡。布局代码如下:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/id_drawerlayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/id_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/id_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1111" />
</FrameLayout>
<LinearLayout
android:id="@+id/id_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#E0EEE0"
android:orientation="vertical" >
<!--左侧菜单布局-->
<ListView
android:id="@+id/id_lv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:divider="#CD853F"
android:dividerHeight="2dp" >
</ListView>
</LinearLayout>
<LinearLayout
android:id="@id/linear_rightmenu"
android:layout_width="100.0dip"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="@color/white"
android:orientation="vertical" >
<!--右侧菜单布局-->
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
4.初始化ListView
mLv = (ListView) findViewById(R.id.id_lv);
str = new String[] { "item1", "item2", "item3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
mLv.setAdapter(adapter);
mLv.setOnItemClickListener(this);
5.设置抽屉导航的监听事件;添加监听器有三种方式:
1)设置DrawerLayout.DrawerListener作为监听器类,里面包含四个回调函数。
mDrawerLayout.setDrawerListener(new DrawerListener() {
/**
* 当抽屉滑动状态改变的时候被调用
* 状态值是STATE_IDLE(闲置--0), STATE_DRAGGING(拖拽的--1), STATE_SETTLING(固定--2)中之一。
* 抽屉打开的时候,点击抽屉,drawer的状态就会变成STATE_DRAGGING,然后变成STATE_IDLE
*/
@Override
public void onDrawerStateChanged(int arg0) {
Log.i("drawer", "drawer的状态:" + arg0);
}
/**
* 当抽屉被滑动的时候调用此方法
* arg1 表示 滑动的幅度(0-1)
*/
@Override
public void onDrawerSlide(View arg0, float arg1) {
Log.i("drawer", arg1 + "");
}
/**
* 当一个抽屉被完全打开的时候被调用
*/
@Override
public void onDrawerOpened(View arg0) {
Log.i("drawer", "抽屉被完全打开了!");
}
/**
* 当一个抽屉完全关闭的时候调用此方法
*/
@Override
public void onDrawerClosed(View arg0) {
Log.i("drawer", "抽屉被完全关闭了!");
}
});
2)设置DrawerListener的子类SimpleDrawerListener,使用这个类的时候不必实现全部的回调函数,可以根据自己的需要重写相应的方法。
mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
});
3)使用DrawerListener的子类ActionBarDrawerToggle。一般与ActionBar结合使用。
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
}
@Override
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle(mDrawerTitle);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
调用closeDrawer()和openDrawer()可以关闭和打开抽屉。其他的方法参考API吧!
实用:https://blog.csdn.net/qq_29882585/article/details/52893078
说明
A.DrawerLayout.closeDrawer关闭侧滑
B.DrawerLayout.openDrawer打开侧滑
C.mDrawer_layout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)关闭手势滑动
D.mDrawer_layout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)打开手势滑动