¿Cómo puedo desactivar una vista detrás de mi SlidingDrawer en Android ?

? Sara @ | Original: StackOverFlow

Tengo un SlidingDrawer que aparece desde la parte inferior de la pantalla y llena la pantalla alrededor del 80 %. A pesar de que la opinión de SlidingDrawer está enfocado, aún es posible hacer clic en los elementos, botones y otros elementos de la vista que está detrás de la SlidingDrawer . Cuando SlidingDrawer está activo / levantado / en foco, quiero desactivar toda la vista detrás de ella por lo que no será capaz de recibir clics y toques . ¿Hay una buena manera de desactivar una vista entera ? He tratado setEnable (falso ) y setClickable (falso ), pero ninguno de los dos funciona.

Help?

Top 5 Respuesta

1synic @

No sé si esto va a funcionar, pero vale la pena intentarlo. llamada  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 Ver en su contenedor (el que el cajón deslizante se desliza sobre ) .

2Joe... @

Aquí está una manera de solucionar este problema ( que necesitaba una solución también ) - agarrar el LinearLayout que mantiene el contenido y agregar un clic oyente. Haga que el oyente clic responder a clics ( tirar, lo que sea) - y esto, entonces lo detiene la propagación de la vista debajo del cajón deslizante - que funciona para mí - y que no bloquee los otros artículos en el cajón.

3kellogs @

La respuesta de Joe no hizo el truco para mí . Mi escenario es un poco diferent . Tengo un FrameLayout con dos hijos. Sólo uno de los niños tiene que ser "activa" en un momento dado, y mientras que el segundo es activa la primera ya no debería procesar ninguna entrada. Mi solución :

    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);
        }
    }
}

Enjoy!

4Tuan Anh @

He tratado de poner SlidingDrawer en el RelativeLayout, en lugar de LinearLayout . y establecer mySlidingDrawer.bringToFront() En el método de apertura.

Así que creo que esta puede ser una solución .