您的位置:首页 > 移动开发 > Android开发

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

2016-11-18 16:03 696 查看
抽屉效果就是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中试过,有机会看看是不是一样的效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息