侧滑菜单DrawerLayout的用法

来源:互联网 发布:房地产大数据来源 编辑:程序博客网 时间:2024/06/05 17:53

网上找了很多关于DrawerLayout的用法的文章,大神们的开发经验真不是吹出来的。可惜我的电脑配置不好,只能用eclipse来做出效果。

DrawerLayout的一个简单实现

<android.support.v4.widget.DrawerLayout />自定义的控件要加上完整的包名,我的只能自己手动敲上去,因为eclipse的自定义控件没有代码提醒的,所以打的时候要细心点。

第二个**<FrameLayout />** 是抽屉抽出来后半显示的布局

当然,接下来的第三个<ListView /> 当然就是抽屉的布局文件了,后续会在该布局的头部加上header头。

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <FrameLayout        android:id="@+id/fl"        android:layout_width="match_parent"        android:layout_height="match_parent" >    </FrameLayout>    <ListView        android:background="#cccc00"        android:id="@+id/lv"        android:layout_width="240dp"        android:layout_height="match_parent"        android:layout_gravity="start" >    </ListView></android.support.v4.widget.DrawerLayout>

布局文件写好之后,我们在Activity文件中做个简单的设置就可以让我们的抽屉显示出来了,虽然功能不是很完善,不过也算是做出点成果了。

@Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        setContentView(R.layout.drawer_layout);        lv = (ListView) this.findViewById(R.id.lv);        lv.setAdapter(new ArrayAdapter<String>(this,                android.R.layout.simple_list_item_1,                new String[] { "jj", "kk" }));    }//通过ActionBarDrawerToggle可以监听DrawerLayout的打开与关闭事件mDrawerLayout = (DrawerLayout) this.findViewById(R.id.drawer_layout);mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,android.R.drawable.ic_input_add, R.string.app_name,R.string.hello_world) {erride            public void onDrawerOpened(View drawerView) {                toolbar.setTitle("open");//              toolbar.scrollBy(0, -30);                toolbar.setVisibility(View.GONE);                super.onDrawerOpened(drawerView);            }            @Override            public void onDrawerClosed(View drawerView) {                toolbar.setTitle(mTitle);                toolbar.setVisibility(View.VISIBLE);                super.onDrawerClosed(drawerView);            }        };

调用ActionBarDrawerToggle.syncState() 在Activity的onPostCreate()中;指示ActionBarDrawerToggle与DrawerLayout的状态同步,并将ActionBarDrawerToggle中的drawer图标,设置为ActionBar的Home-Button的icon

/** activity创建完成后 */      @Override      protected void onPostCreate(Bundle savedInstanceState) {          super.onPostCreate(savedInstanceState);          mDrawerToggle.syncState();//该方法会自动和actionBar关联, 将开关的图片显示在了action上,如果不设置,也可以有抽屉的效果,不过是默认的图标      }/**

设备配置改变时 例如屏幕转向

    @Override      public void onConfigurationChanged(Configuration newConfig) {          super.onConfigurationChanged(newConfig);          mDrawerToggle.onConfigurationChanged(newConfig);      }  

/* drawer的监听的另一种方法 */

    private class MyDrawerListener implements DrawerLayout.DrawerListener {          @Override        public void onDrawerOpened(View drawerView) {// 打开drawer      mDrawerToggle.onDrawerOpened(drawerView);//开关状态改为opened          }          @Override        public void onDrawerClosed(View drawerView) {// 关闭drawer  mDrawerToggle.onDrawerClosed(drawerView);//开关状态改为closed          }          @Override          public void onDrawerSlide(View drawerView, float slideOffset) {// drawer滑动的回调              mDrawerToggle.onDrawerSlide(drawerView, slideOffset);          }          @Override          public void onDrawerStateChanged(int newState) {// drawer状态改变的回调              mDrawerToggle.onDrawerStateChanged(newState);          }  
0 0