android - 默认情况下调整内容 打开抽屉导航

标签 android navigation-drawer

我的左边和右边有两个抽屉。此时右抽屉处于锁闭状态,但左抽屉可以打开和关闭。打开抽屉时,我使用抽屉偏移插入中间内容。现在我还希望右侧抽屉(默认情况下打开)也应该移动/调整内容,但我无法做到这一点。因为当左抽屉打开时,它会将内容推到右抽屉下面。因此,我希望默认打开时的右侧抽屉应调整内容,而当我打开左侧抽屉时,内容应调整且不应移动到右侧抽屉下方。

这是我的代码:

<DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true">

        <RelativeLayout
            android:id="@+id/main_screen"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="@drawable/bg">

            <include
                android:id="@+id/includedView"
                layout="@layout/view" />

        </RelativeLayout>


        <!--  ======= side menu ====== -->
        <RelativeLayout

            android:id="@+id/leftMenu"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="left">

            <include
                layout="@layout/leftmenuLayout"
                android:layout_width="wrap_content"
                android:layout_height="match_parent" />

        </RelativeLayout>

        <RelativeLayout

            android:id="@+id/rightMenu"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="right">

            <include
                layout="@layout/rightmenuLayout"
                android:layout_width="wrap_content"
                android:layout_height="match_parent" />

        </RelativeLayout>
        <!-- ======================= -->
    </DrawerLayout>

抽屉 Activity :

 mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  mDrawerLayout.setScrimColor(Color.parseColor("#00000000"));


        main_screen = (RelativeLayout) findViewById(R.id.main_screen);


        leftMenu= (RelativeLayout) findViewById(R.id.leftMenu);

        rightMenu= (RelativeLayout) 
        findViewById(R.id.rightMenu);

        Display display = getWindowManager().getDefaultDisplay();
        size = new Point();
        display.getSize(size);

        mDrawerLayout.addDrawerListener(new CustomDrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                float moveFactor = 0;
                moveFactor = (drawerView.getWidth() * slideOffset);
                main_screen.setTranslationX(moveFactor);

            }

            @Override
            public void onDrawerOpened(View drawerView) {
                invalidateOptionsMenu();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                invalidateOptionsMenu();
            }

            @Override
            public void onDrawerStateChanged(int newState) {

            }
        });

        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, rightMenu);
        mDrawerLayout.openDrawer(GravityCompat.END);


        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, leftMenu);


        ViewGroup.LayoutParams params = leftMenu.getLayoutParams();
        params.width = (((size.x / 2) / 4));
        rl_slider_menu.setLayoutParams(params);

        ViewGroup.LayoutParams paramsRight = 
        rightMenu.getLayoutParams();
        paramsRight.width = ((size.x / 3));
        rightMenu.setLayoutParams(paramsRight);

        DrawerLayout.LayoutParams paramsContent = (DrawerLayout.LayoutParams) main_screen.getLayoutParams();
        paramsContent.setMargins(0, 0, (((size.x / 2) / 4)), 0); //substitute parameters for left, top, right, bottom
        main_screen.setLayoutParams(paramsContent);
        main_screen.invalidate();

最佳答案

一旦您认真思考,这实际上是一个非常简单的实现。

我们只需要跟踪两个抽屉的插入尺寸,将内容View缩放到剩余空间,然后将其平移每个插入的一半的差异。例如。基于问题中的代码:

mDrawerLayout.addDrawerListener(new DrawerLayout.DrawerListener() {
        private float leftInset, rightInset;

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            if (drawerView == leftMenu) {
                leftInset = slideOffset * leftMenu.getWidth();
            }
            else {
                rightInset = slideOffset * rightMenu.getWidth();
            }

            final float scale = 1 - (leftInset + rightInset) / main_screen.getWidth();
            main_screen.setScaleX(scale);

            final float translation = leftInset / 2 - rightInset / 2;
            main_screen.setTranslationX(translation);
        }

        ...
}

关于android - 默认情况下调整内容 打开抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067249/

相关文章:

java - java中的逻辑运算

java - Jxl 单元对齐

android - 覆盖 PhoneGap Android 中的后退按钮

android - 设置状态栏颜色后的透明状态栏抽屉导航

java - 构建测试滑动菜单时出错

android - 如何在没有支持库的情况下创建抽屉导航

android - 在 Jenkins 上使用 Retrolambda 构建失败

java - SharedPreferences 不保留值(value)

java - 导航栏可扩展 ListView android

java - 带自定义适配器的 ListView 不加载标题数组,仅使用抽屉导航加载 0