侧边栏是android应用中很常见的一个界面效果(抽屉效果)。而利用drawerlayout实现右侧栏是相对简单的。而且这个控件自带滑动效果,十分方便。
drawerlayout属于android-support-v4.jar的包的内容,sdk新的就不用更新了,如果旧版本就需要导入这个包了。
先来看看效果
这里实现了抽屉效果和为了方便使用者在各处可以随意打开这个抽屉,我在这里定义在点击菜单可出现抽屉。
代码说明
1.activity的布局文件
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- 注意drawrlayout的命名,因为一会要使用-->
<framelayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/fragment_hello"
android:name="com.patent.patentwarmsystem.correlationfragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</framelayout>
<include
layout="@layout/activity_main_right"
android:id="@+id/right_drawer"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="end"
android:background="#ffffff"
android:gravity="center_horizontal" >
</include>
</android.support.v4.widget.drawerlayout>
可以看到drawlayout可被当作控件使用,然后定义侧边栏的布局是,include了一个布局,里面可自己定义(随意)。但是要注意这个右侧的布局属性android:layout_gravity=”end”。这样才是放置在右边。
放置在左边的是: android:layout_gravity=”start”
2.activity的代码使用
首先注意导入这个:import android.support.v4.widget.drawerlayout;
public class mainactivity extends appcompatactivity {
private drawerlayout drawerlayout;
private actionbardrawertoggle toggle;
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
initdrawerlayout();
drawerlayout.setscrimcolor(color.gray); //这个可以设置抽屉拉出后,主界面的颜色,我这里使用了系统自带的灰色
}
private void initdrawerlayout() {
//注意:初始化的是drawerlayout整个大布局,不是初始化抽屉的那个id
drawerlayout = (drawerlayout) super.findviewbyid(r.id.drawer_layout);
drawerlayout.setscrimcolor(color.transparent);
//v4控件 actionbar上的抽屉开关,可以实现一些开关的动态效果
toggle = new actionbardrawertoggle(this, drawerlayout,
r.drawable.star_change, r.string.drawer_open
, r.string.drawer_close) {
public void ondrawerclosed(view drawerview) {
super.ondrawerclosed(drawerview);//抽屉关闭后
}
public void ondraweropened(view drawerview) {
super.ondraweropened(drawerview);//抽屉打开后
}
};
drawerlayout.setdrawerlistener(toggle);
}
/**
* 加载菜单
*/
@override
public boolean oncreateoptionsmenu(menu menu) {
// inflate the menu; this adds items to the action bar if it is present.
getmenuinflater().inflate(r.menu.menu, menu);
return true;
}
//上面说到方便使用者随处调用就是这个方法,只需调用这个方法绑定id即可随处控制抽屉的拉出
private void togglerightsliding(){//该方法控制右侧边栏的显示和隐藏
if(drawerlayout.isdraweropen(gravitycompat.end)){
drawerlayout.closedrawer(gravitycompat.end);//关闭抽屉
}else{
drawerlayout.opendrawer(gravitycompat.end);//打开抽屉
}
}
@override
public boolean onoptionsitemselected(menuitem item) {
switch (item.getitemid()) {
case r.id.action_personal:
togglerightsliding();
break;
}
return super.onoptionsitemselected(item);
}
}
另外再给几个方法,方便读者的需求改动:
// 通过代码:根据重力方向打开指定抽屉
drawerlayout.opendrawer(gravity.left);
// 设置抽屉阴影
drawerlayout.setdrawershadow(r.drawable.ic_launcher, gravity.left);
// 设置抽屉空余处颜色
drawerlayout.setscrimcolor(color.blue);
好了,实现一个抽屉的功能就是这些代码,可以看出自定义的空间还是很大的。
更多android实现右边抽屉drawerlayout效果。