美文网首页Android技术分享交流区Android知识Android开发
DrawerLayout 实现SlidingMenu侧边栏菜单效

DrawerLayout 实现SlidingMenu侧边栏菜单效

作者: 曾经的追风少年 | 来源:发表于2016-10-26 10:23 被阅读2659次

    先看效果图:

    ![

    0}`JV5)$1762$8DF3K@SPDR.png
    ]6ZLN7KJ6QO.png](http:https://img.haomeiwen.com/i2787812/3b2f620b063bbf0b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    drawerLayout是Support Library包中实现了侧滑菜单效果的控件,使用起来非常的简单。
    1、概述
    drawerLayout其实是一个布局控件,跟LinearLayout等控件是一样,但是drawerLayout带有滑动的功能。只要按照drawerLayout的规定布局方式写完布局,就能有侧滑的效果。如下:

    <!-- android:clickable="true"表示侧滑界面可以被点击(当侧滑打开时,拦截频幕的点击事件) -->
    <android.support.v4.widget.DrawerLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/drawer_layout"
     android:clickable="true"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <!-- Content 内容-->
     <FrameLayout
     android:id="@+id/content_frame_left"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />
    
    <!-- Sliding  Left 左边 -->
    <!--<FrameLayout
     android:id="@+id/sliding_frame"
     android:layout_width="200dp"
     android:layout_height="match_parent" />-->
    
     <!-- Sliding  Right  右边 -->
    <FrameLayout
     android:id="@+id/sliding_frame"
     android:layout_width="200dp"
     android:layout_height="match_parent" />
    </android.support.v4.widget.DrawerLayout>
    

    写完布局,然后在activity中初始化,根据自己的需求替换内容布局和侧滑布局(不一定用framLayout,可以使用任何其他的布局):

            getSupportFragmentManager().beginTransaction().replace(R.id.fram_context, new ContentFragment()).commit();
            getSupportFragmentManager().beginTransaction().replace(R.id.fram_sliding, new SlidingFragment()).commit();
            // 设置分割线已经滑动方向
            mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START);
            // 禁止手势滑动(使用开关控制)
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
            // 添加DrawerListener监听器
            mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
                @Override
                public void onDrawerSlide(View drawerView, float slideOffset) {
                    // 抽屉改变时使用
                    View mContent = mDrawerLayout.getChildAt(0);
                    /* 
                     * 当菜单栏滑出时,内容界面随滑动方向平移(模拟SlidingMenu效果) 
                     * ViewHelper为 nineoldandroids.jar中的工具类
                     */
                    ViewHelper.setTranslationX(mContent,-fram_sliding.getMeasuredWidth() * slideOffset);
                }
    
                @Override
                public void onDrawerOpened(View drawerView) {
                    // 打开抽侧边栏
                    LogUtil.d("DrawerLayout is opened");
                }
    
                @Override
                public void onDrawerClosed(View drawerView) {
                    // 关闭侧边栏
                    LogUtil.d("DrawerLayout is closed");
                }
    
                @Override
                public void onDrawerStateChanged(int newState) {
                    // 改变侧边栏的状态
                    LogUtil.d("状态改变"+newState);
                }
            });
        }
    

    这里禁止了手势滑动打开关闭侧边栏,使用的是按钮监听控制:

            functionImg.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (fram_sliding.isShown()) {
                        //如果侧边栏处于显示状态,关闭侧边栏,否则打开侧边栏
                        mDrawerLayout.closeDrawer(fram_sliding);
                    }else {
                        mDrawerLayout.openDrawer(fram_sliding);
                    }
                }
            });
    

    这里只实现了右边菜单栏,由于DrawerLayout侧边栏打开时,content布局不会随其平移,为了实现SlidingMenu的效果,加入了nineoldandroids.jar,使用ViewHelper来平移content布局。

    相关文章

      网友评论

        本文标题:DrawerLayout 实现SlidingMenu侧边栏菜单效

        本文链接:https://www.haomeiwen.com/subject/zfeduttx.html