DrawableLayout(导航抽屉效果)使用遇到的几个常规网上资源未提到的部分

本文介绍如何使用DrawerLayout实现Android应用中的抽屉导航效果,包括基本布局配置、使用Fragment进行内容替换的方法及如何定制抽屉阴影和锁屏行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽屉效果就是DrawerLayout,该类位于V4包中。
android.support.v4.widget.DrawerLayout,与SlideMenu效果类似,但界面效果有些不同(不细说)
在使用DrawerLayout的过程中,最常用的是左右抽屉内容固定,直接写在xml中,
比如:
<?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" >
    <!-- 内容区域 -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </RelativeLayout>
    <!-- 左侧抽屉 -->
  <LinearLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="#E0EEE0"
        android:orientation="vertical" >
    </LinearLayout>
    <!-- 右侧抽屉 -->
    <LinearLayout
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:background="#EE8262"
        android:orientation="vertical" >
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

这类最简单的是官方类的。但我们要用的时候会有很多变化,比如,左右或者还有中间部分内容不固定,就需要使用Fragmemnt,可以使用fragment的replaceFRagment方法替换:
private Fragment replaceFragment(int viewResource, String fragmentName, String key, int extraValue) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        Fragment fragment = Fragment.instantiate(this, fragmentName);
        Bundle args = new Bundle();
        args.putInt(key, extraValue);
        fragment.setArguments(args);
        ft.replace(viewResource, fragment);
        ft.commit();
        getSupportFragmentManager().executePendingTransactions();
        return fragment;
    }
或者
    private Fragment replaceFragmentByName(int viewResource, String fragmentName) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        Fragment fragment = Fragment.instantiate(this, fragmentName);
        ft.replace(viewResource, fragment);
        ft.commit();
        getSupportFragmentManager().executePendingTransactions();
        return fragment;
    }
这是一个方法,只是有的fragment需要不同标记或传递参数等,可根据自己的需要自己写这个replace方法。
DrawableLayout  几个重要方法:
private DrawerLayout mDrawerLayout;

mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_left_shadow, Gravity.START);   //左侧抽屉设置阴影,这个阴影最好比较小,有一点效果就好了,不能切图,会很难看,最好自己写渐变的shape,定好宽高
        mDrawerLayout.setDrawerShadow(R.drawable.drawablelayout_right_shadow, Gravity.END);
        mDrawerLayout.setScrimColor(getResources().getColor(R.color.c_03222d));   //抽屉效果显现出来时有透明渐变到此颜色
        mDrawerLayout
                .setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, findViewById(R.id.fragment_content_right)); //锁定右侧抽屉不能滑动出现,但这种情况点击返回时,抽屉不会退出,需要下面监听改变 DrawerLockMode:
        mDrawerLayout.setDrawerListener(new DrawerListener() {
            @Override
            public void onDrawerStateChanged(int arg0) {
            }
            @Override
            public void onDrawerSlide(View arg0, float arg1) {
            }
            @Override
            public void onDrawerOpened(View arg0) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,
                        findViewById(R.id.fragment_content_right));
            }
            @Override
            public void onDrawerClosed(View arg0) {
                mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
                        findViewById(R.id.fragment_content_right));
            }
        });
另外,如果想不根据系统自带的抽屉效果宽,可以在 DrawerLayout的xml中设定宽度,比如最上方的240dp,200dp,而不是在replace的fragment中设置,我也没有在fragment的xml中试过,有机会看看是不是一样的效果



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值