1.drawerLayout其实是一个布局控件,跟LinearLayout等控件是一种东西,但是drawerLayout带有滑动的 功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#897575">
<ImageView
android:id="@+id/main_iv_left"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_margin="10dp"
android:background="@mipmap/ic_launcher" />
<TextView
android:id="@+id/main_tv_title"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:gravity="center"
android:text="标题" />
<ImageView
android:id="@+id/main_iv_right"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_margin="10dp"
android:background="@mipmap/ic_launcher" />
</RelativeLayout>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
2.设置左右两侧的页面
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#ffffff">
<ListView
android:id="@+id/main_lv_letf"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#ffffff">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="右侧侧拉菜单"
android:textSize="30dp" />
</LinearLayout>
注意:一、主内容区的布局代码要放在侧滑菜单布局的前面,这可以帮助DrawerLayout判断谁是侧滑菜单,谁是主内容区;二侧滑菜单的部分的布局(这里是ListView)可以设置layout_gravity属性,他表示侧滑菜单是在左边还是右边。
3.通过在布局中设置DrawerLayout已经可以实现侧滑的效果,还可以通过在Activity中设置一些特性;
public class MainActivity extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
获取到侧拉菜单的对象
drawerLayout = (DrawerLayout) findViewById(R.id.main_drawer);
/**
* 通过setDrawerLockMode()方法可以设置侧拉菜单的拉动状态
* {LOCK_MODE_UNLOCKED, 解锁
* LOCK_MODE_LOCKED_CLOSED, 关闭拉动功能
* LOCK_MODE_LOCKED_OPEN, 一直处于打开状态
LOCK_MODE_UNDEFINED
*/
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
点击按钮打开左侧侧拉菜单
findViewById(R.id.main_iv_left).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
打开侧拉菜单的方法
drawerLayout.openDrawer(Gravity.LEFT);
}
});
findViewById(R.id.main_iv_right).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawerLayout.openDrawer(Gravity.RIGHT);
}
});
添加侧拉菜单的监听事件
drawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
滑动过程中调用的方法
public void onDrawerSlide(View drawerView, float slideOffset) {
Log.i("onDrawerSlide", "=====1====");
}
当侧拉菜单完全打开时调用的方法
public void onDrawerOpened(View drawerView) {
Log.i("onDrawerOpened", "=====2====");
}
当侧拉菜单完全关闭时调用的方法
public void onDrawerClosed(View drawerView) {
Log.i("onDrawerClosed", "=====3====");
}
当侧拉菜单拉动过程中状态被改变是调用的方法
public void onDrawerStateChanged(int newState) {
Log.i("onDrawerStateChanged", "=====4====");
}
});
}