Как я могу отключить представление позади моего SlidingDrawer в Android? - PullRequest
15 голосов
/ 08 апреля 2010

У меня есть SlidingDrawer, который выскакивает из нижней части экрана и заполняет экран примерно на 80%.Несмотря на то, что представление SlidingDrawer находится в фокусе, все еще можно нажимать на элементы, кнопки и другие элементы в представлении, которое находится позади SlidingDrawer.Когда SlidingDrawer активен / перемещен вверх / в фокусе, я хочу отключить весь вид позади него, чтобы он не мог получать щелчки и касания.Есть ли хороший способ отключить весь вид?Я пробовал setEnable (false) и setClickable (false), но ни один из них не работает.

Справка?

Ответы [ 5 ]

12 голосов
/ 24 сентября 2010

Вот способ обойти эту проблему (мне также требовалось решение) - возьмите linearLayout, который содержит содержимое, и добавьте прослушиватель щелчков. Попросите слушателя щелчка реагировать на щелчки (выбрасывать, что угодно) - и тогда он прекратит распространение на вид под выдвижным ящиком - это работает для меня - и не блокирует другие элементы в ящике.

2 голосов
/ 23 июля 2015

В боковой разметке сделать android:clickable="true"

Например, следующий файл: drawer.xml

Внутри LinearLayout android:id="@+id/drawer_view" clickable="true"

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">


        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </FrameLayout>      

        <LinearLayout
            android:id="@+id/drawer_view"
            android:layout_width="@dimen/navigation_drawer_width"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:layout_gravity="start"
            android:clickable="true"
            android:background="@color/drawer_background">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp"
                android:background="@drawable/order_list_selector"
                android:orientation="horizontal">

                <ImageView
                    android:layout_width="@dimen/user_image_w_h"
                    android:layout_height="@dimen/user_image_w_h"
                    android:scaleType="fitCenter"
                    android:id="@+id/drawerUserImage"
                    android:src="@drawable/ic_user_icon"
                    android:layout_gravity="center_vertical" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:layout_gravity="center_vertical"
                    android:orientation="vertical"
                    android:layout_marginLeft="5dp"
                    android:padding="5dp">

                    <TextView
                        android:id="@+id/drawerUserNameTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="Mansukh Ahir"
                        android:textColor="@android:color/black"
                        android:textSize="@dimen/font_large" />

                    <TextView
                        android:id="@+id/drawerEmailIdTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textSize="@dimen/font_very_small"/>
                </LinearLayout>
            </LinearLayout>

            <View
                android:layout_width="fill_parent"
                android:layout_height="1dp"
                android:background="@color/holo_gray_light" />

            <ListView
                android:id="@+id/drawerListSlideMenu"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:choiceMode="singleChoice"
                android:dividerHeight="1dp" />
        </LinearLayout>

    </android.support.v4.widget.DrawerLayout>
2 голосов
/ 08 октября 2011

Я пытался поместить SlidingDrawer в RelativeLayout вместо LinearLayout. И установить mySlidingDrawer.bringToFront() в методе открытия.

Так что я думаю, что это может быть решением.

1 голос
/ 19 августа 2011

Ответ Джо не помог мне.Мой сценарий немного отличается.У меня есть FrameLayout с двумя детьми.Только один из дочерних элементов должен быть «активным» в данный момент, и пока второй активен, первый больше не должен обрабатывать ввод.Мое решение:

    public static void changeVGstate(ViewGroup current, boolean enable)
{
    current.setFocusable(enable);
    current.setClickable(enable);
    current.setEnabled(enable);

    for (int i = 0; i < current.getChildCount(); i++)
    {
        View v = current.getChildAt(i); 
        if (v instanceof ViewGroup)
            changeVGstate((ViewGroup)v, enable);
        else
        {
            v.setFocusable(enable);
            v.setClickable(enable);
            v.setEnabled(enable);
        }
    }
}

Наслаждайтесь!

0 голосов
/ 08 апреля 2010

Не знаю, сработает ли это, но стоит попробовать. Вызов setDescendantFocusability (ViewGroup.FOCUS_BLOCK_DESCENDANTS) на вашем контейнере (тот, по которому скользящий ящик скользит).

...