美文网首页
Android入门教程 | DrawerLayout 侧滑栏

Android入门教程 | DrawerLayout 侧滑栏

作者: 进击的老六 | 来源:发表于2024-01-21 17:04 被阅读0次

    DrawerLayout 是实现了侧滑菜单效果的控件。

    DawerLayout 分为侧边菜单和主内容区两部分

    • 主内容区要放在侧边菜单前面,还有就是主内容区最好以 DrawerLayout 最好为界面的根布局,否则可能会出现触摸事件被屏蔽的问题。
    • 侧滑菜单部分的布局必须设置 layout_gravity 属性,表示侧滑菜单是在左边还是右边,设置了 layout_gravity="start/left" 的视图才会被认为是侧滑菜单。

    使用的注意事项

    • 主内容视图一定要是 DrawerLayout 的第一个子视图
    • 主内容视图宽度和高度需要 match_parent
    • 必须显示指定侧滑视图的 android:layout_gravity 属性 android:layout_gravity = "start" 时,从左向右滑出菜单 android:layout_gravity = "end"时,从右向左滑出菜单 不推荐使用left和right!!!
    • 侧滑视图的宽度以dp为单位,不建议超过320dp(为了总能看到一些主内容视图) 设置侧滑事件:mDrawerLayout.setDrawerListener(DrawerLayout.DrawerListene

    DrawerLayout 示例:

    要使用 DrawerLayout,可以在 layout xml 文件中将 DrawerLayout 设置为根视图。

    从左边滑出的抽屉视图(侧滑栏)

    一个简单的从左边滑出侧滑栏的例子。

    侧滑栏滑出后,后面的视图会有个阴影。

    layout 文件

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:openDrawer="start">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="我是主页" />
    
        </RelativeLayout>
    
        <RelativeLayout
            android:layout_width="250dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#ffffff">
    
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="我是侧滑栏" />
        </RelativeLayout>
    
    </androidx.drawerlayout.widget.DrawerLayout>
    

    效果:

    需要注意的是,DrawerLayout 要设置tools:openDrawer="start";而且侧滑栏layout要设置android:layout_gravity="start"

    如果改成tools:openDrawer="end",侧滑栏 layout 要设置android:layout_gravity="end"。侧滑栏可以从右边滑出。

    现在侧边栏放的是RelativeLayout。 也可以放一个RecyclerView。

    抽屉出来时推动页面

    监听侧滑栏的滑动事件,使用ActionBarDrawerToggle。侧滑栏滑出时,在onDrawerSlide方法中计算出滑动的距离。 然后主视图设置水平相对偏移距离setTranslationX即可。

    可在activity的onCreate方法执行配置操作

    DrawerLayout root = findViewById(R.id.root);
        final View contentView = findViewById(R.id.content_field);
    
        ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, root, android.R.string.yes, android.R.string.cancel) {
    
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                float slideX = drawerView.getWidth() * slideOffset;
                contentView.setTranslationX(slideX);
            }
        };
        root.addDrawerListener(actionBarDrawerToggle);
    
    改变滑出时的阴影

    使用 DrawerLayout 的setScrimColor方法,改变阴影颜色。默认的阴影颜色是 DEFAULT_SCRIM_COLOR = 0x99000000

    DrawerLayout root = findViewById(R.id.root);
    root.setScrimColor(Color.TRANSPARENT);
    
    锁定 DrawerLayout
    root.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); // 解锁
    root.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); // 不检测从左到右的滑动动作
    

    相关文章

      网友评论

          本文标题:Android入门教程 | DrawerLayout 侧滑栏

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