DrawerLayout是Android的support.v4包中提供的控件,在没有该控件之前,大家广泛使用开源库SlidingMenu来实现侧滑菜单的功能。
使用该控件比较简单,首先我们定义一个DrawerLayout的根布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 第一个View表示主布局 -->
<RelativeLayout
android:id="@+id/rl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="这是主布局"/>
</RelativeLayout>
<!-- 第二个View表示侧滑菜单的布局 -->
<LinearLayout
android:id="@+id/ll_drawerLeft"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#ffffcc"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_drawerLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@mipmap/ic_launcher"/>
<Button
android:id="@+id/btn_drawerLeft"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个按钮"/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
关于布局需要注意以下几点:
1. 主内容视图一定要是DrawerLayout布局的第一个View。第二个View便是侧滑菜单,可以选择性的添加第三个视图,使左右各一个侧滑菜单
2.必须显示指定抽屉布局(本文使用的是LinearLayout)的android:layout_gravity属性
android:layout_gravity=”start”时,从右向左侧滑出
android:layout_gravity=”end”时,从左向右侧滑出
“start” 和 “end” 可以用 “left” 和 “right” 来代替,但是不建议替换
布局完成后,我们就可以再Activity中操作了
public class MainActivity extends Activity implements View.OnClickListener {
private DrawerLayout mDrawerLayout; //根布局
private LinearLayout ll_drawer; //侧滑栏布局
private TextView tv;
private Button btn_drawer;
private ImageView iv_drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.tv);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
ll_drawer = (LinearLayout) findViewById(R.id.ll_drawerLeft);
btn_drawer = (Button) findViewById(R.id.btn_drawerLeft);
iv_drawer = (ImageView) findViewById(R.id.iv_drawerLeft);
btn_drawer.setOnClickListener(this); //可以直接对侧滑栏控件进行操作
iv_drawer.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_drawerLeft:
tv.setText("点击了按钮");
mDrawerLayout.closeDrawer(ll_drawer); //把侧滑栏ll_drawer关闭
break;
case R.id.iv_drawerLeft:
tv.setText("点击了头像图片");
mDrawerLayout.closeDrawer(ll_drawer);
break;
}
}
}