赞
踩
首先在你想要添加DrawerLayout的xml文件中,用
</android.support.v4.widget.DrawerLayout>
包围整个XML文件,给赋予命名空间,(xmlns:android="http://schemas.android.com/apk/res/android")
(可能并不需要这样,由于使用比较少,我一般使用SlidingMenu,所以没有测试。。。。。。)
最终效果是这样:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/Draw_Layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
-
- <LinearLayout>
-
- //主界面的一些东西
-
- </LinearLayout>
- //ListView与LinearLayout或者RelativeLayout是并列的
- <ListView //但是一定要ListView在下面
- android:id="@+id/List_View"
- android:layout_width="240dp" //这个不要超过360dp,给用户留下一点空间,可以看到后面的东西
- android:layout_height="match_parent"
- android:layout_gravity="start" //这个值必须要指定,start是从左侧拖拽出菜单,end是从右侧
- android:background="#ffd0e5ff" //而不推荐使用left,right
- android:choiceMode="singleChoice" //单选
- android:divider="@android:color/transparent" //背景透明
- android:dividerHeight="0dp"> //项间距为0
-
- </ListView>
- </android.support.v4.widget.DrawerLayout>
- private DrawerLayout drawerLayout;
- private ListView listView;
- private ArrayList<String> menuList;
- private ArrayAdapter<String> arrayAdapter;
- drawerLayout= (DrawerLayout) findViewById(R.id.Draw_Layout);
- listView= (ListView) findViewById(R.id.List_View);
- menuList = new ArrayList<String>();
- for (int ai = 0; ai < 6; ai++) {
- menuList.add("Item" + ai);
- }
- arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,menuList);
- listView.setAdapter(arrayAdapter);
- listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- //使用 id来获取当前单击的是哪个按钮 id从0开始,第一个按钮是0
- //使用 drawerLayout.closeDrawer(listView)来关闭侧边栏
- //
- }
- });
(1)drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); //关闭手势滑动
然后在需要使用的时候
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); //打开手势滑动
(2)还有一种方式不推荐采用 : 即直接移除view:
drawerLayout.remove(View);
有时候会想让物理键盘的菜单按键弹出来这个DrawerLayout,可以通过截获键盘单击事件来实现:
- private boolean isDrawerLayoutPopped=false; //用这个Boolean来判断菜单是否弹出
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- switch (keyCode)
- {
- case KeyEvent.KEYCODE_MENU: //如果是 菜单 按钮按下
- if (!isDrawerLayoutPopped){
- drawerLayout.openDrawer(listView);
- isDrawerLayoutPopped=true;
- } else {
- drawerLayout.closeDrawer(listView);
- isDrawerLayoutPopped=false;
- }
- return true; //如果返回的是false则表示这个事件还没有处理完成,需要其他后续的处理
- } //如果返回true则代表已经处理完成,按键消息到此中断
- return super.onKeyDown(keyCode, event);
- }
使用ActionBarDrawerToggle类来实现ActionBar与DrawerLayout的互动,还可以加入动画效果
首先,新建一个ActionBarDrawerToggle
- private ActionBarDrawerToggle actionBarDrawerToggle;
- private final String OldTitle;
- OldTitle=(String)getTitle(); //弹出后改变标题,回去后再改回来,这个是本来的标题
-
- actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, ActionBar的图片资源,
- R.string.drawer_open,R.string.drawer_close) //最后这两个参数,需要在工程的资源文件string.xml中加入两个字符串,
- { //作为菜单弹出的文字提示
- @Override
- public void onDrawerOpened(View drawerView) { //菜单弹出的事件
- super.onDrawerOpened(drawerView);
- getActionBar().setTitle("请选择"); //弹出后修改了标题
- invalidateOptionsMenu(); // Call onPrepareOptionsMenu() 重绘菜单选项
- }
-
- @Override
- public void onDrawerClosed(View drawerView) { //菜单收回的事件
- super.onDrawerClosed(drawerView);
- getActionBar().setTitle(OldTitle); //标题改回去
- invalidateOptionsMenu(); //重绘菜单选项
- }
- };
- drawerLayout.setDrawerListener(actionBarDrawerToggle);
- getActionBar().setDisplayHomeAsUpEnabled(true); //这个函数可以开启左上角的返回按钮
- getActionBar().setHomeButtonEnabled(true); //启用这个按钮
- @Override
- public boolean onPrepareOptionsMenu(Menu menu) {
- boolean isDrawerOpen = drawerLayout.isDrawerOpen(listView); //判断菜单是否显示
- menu.findItem(R.id.图标ID).setVisible(!isDrawerOpen); //这里有多少图标都隐藏,这里只有一个
- return super.onPrepareOptionsMenu(menu);
- }
- @Override
- protected void onPostCreate(Bundle savedInstanceState) {
- super.onPostCreate(savedInstanceState);
- //需要将ActionDrawerToggle与DrawerLayout的状态同步
- //将ActionBarDrawerToggle中的drawer图标,设置为ActionBar中的Home-Button的Icon
- mDrawerToggle.syncState();
- }
- @Override
- public void onConfigurationChanged(Configuration newConfig) { //这个是屏幕旋转触发的事件
- super.onConfigurationChanged(newConfig);
- mDrawerToggle.onConfigurationChanged(newConfig);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。