簡體   English   中英

右側的導航抽屜不會保持打開狀態

[英]Navigation drawer on right side not staying open

我正在使用右側的NavigationDrawer來顯示一些過濾器。 問題是右邊的抽屜只做一個投擲手勢時保持打開狀態。 如果我將gravity屬性更改為startleft ,則它會保持正常打開狀態。 我認為正常情況是緩慢拖動然后放手將保持抽屜打開。 右側有抽屜,似乎對閉合位置有偏差。

難道我做錯了什么? 有沒有辦法讓它正常滑動? 我的用戶很難搞清楚他們需要扔掉以保持抽屜打開。

使用支持庫。

需要投擲:

<LinearLayout
    android:id="@+id/filtersDrawer"
    android:layout_width="200dp"
    android:layout_height="fill_parent"
    android:layout_gravity="end"
    android:background="@color/drawer_color"
    android:orientation="vertical" >

不需要扔掉:

<LinearLayout
    android:id="@+id/filtersDrawer"
    android:layout_width="200dp"
    android:layout_height="fill_parent"
    android:layout_gravity="start"
    android:background="@color/drawer_color"
    android:orientation="vertical" >

謝謝!

我覺得我已經提出了正確的邏輯來解決股票實施中的不足。

drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
    /**
     * percentage of its width that the drawer needs to be open to
     * trigger a toggle (between 0 and 1).
     **/
    private static final float TOGGLE_OFFSET = 0.3f;

    private float lastSlideOffset;
    private boolean isDragging;

    @Override
    public void onDrawerSlide(View view, float slideOffset) {
        lastSlideOffset = slideOffset;
    }

    @Override
    public void onDrawerOpened(View view) {}

    @Override
    public void onDrawerClosed(View view) {}

    @Override
    public void onDrawerStateChanged(int newState) {
        switch (newState) {
            case DrawerLayout.STATE_DRAGGING:
                isDragging = true;
                break;

            case DrawerLayout.STATE_IDLE:
                isDragging = false;
                break;

            case DrawerLayout.STATE_SETTLING:
                if (isDragging) {
                    attemptToggle();
                }
                break;
        }
    }

    private void attemptToggle() {
        if (drawerLayout.isDrawerOpen(Gravity.END)) {
            if (lastSlideOffset <= 1 - TOGGLE_OFFSET) {
                drawerLayout.closeDrawer(Gravity.END);
            } else {
                drawerLayout.openDrawer(Gravity.END);
            }

        } else {
            if (lastSlideOffset >= TOGGLE_OFFSET) {
                drawerLayout.openDrawer(Gravity.END);
            } else {
                drawerLayout.closeDrawer(Gravity.END);
            }
        }
    }
});

您可以通過使用偵聽器並在用戶拖動一定百分比時強制打開/關閉抽屜,然后釋放抽屜來解決此問題,如下所示:

    mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        private float mLastOffset;
        @Override
        public void onDrawerSlide(View view, float slideOffset) {
            mLastOffset = slideOffset;
        }

        @Override
        public void onDrawerOpened(View view) {

        }

        @Override
        public void onDrawerClosed(View view) {

        }

        @Override
        public void onDrawerStateChanged(int newState) {
            if (newState == DrawerLayout.STATE_SETTLING) {
                if (mLastOffset > 0.5f) {
                    mDrawerLayout.openDrawer(Gravity.END);
                } else {
                    mDrawerLayout.closeDrawer(Gravity.END);
                }
            }
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM