Come è possibile disattivare la vista dietro la SlidingDrawer in Android ?

? Sara @ | Original: StackOverFlow

Ho una SlidingDrawer che si apre dalla parte inferiore dello schermo e riempie lo schermo circa 80 % . Anche se la vista SlidingDrawer è a fuoco, è ancora possibile fare clic sugli oggetti, i pulsanti e altri elementi nella vista che si trova dietro il SlidingDrawer . Quando SlidingDrawer è attiva / tirato / a fuoco, voglio disattivare l'intera vista dietro di esso in modo che non sarà in grado di ricevere i clic e tocchi . C'è un buon modo per disattivare un intero punto di vista? Ho provato setEnable ( false) e setClickable ( false), ma nessuno di loro lavoro .

Help?

Top 5 Risposta

1synic @

Non so se questo funzionerà, ma vale la pena di provare . chiamata  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 sul recipiente View (quello che il cassetto scorrevole scorre sopra ) .

2Joe... @

Ecco un modo per aggirare questo problema ( ho bisogno di una soluzione anche ) - afferrare il LinearLayout che contiene il contenuto e aggiungere un clic ascoltatore . Avere la click ascoltatore risponde ai clic ( buttare via, a prescindere) - e questo poi ferma moltiplicazione alla vista sotto il cassetto scorrevole - funziona per me - e non blocca le altre voci nel cassetto .

3kellogs @

La risposta di Joe non ha fatto il trucco per me . Il mio scenario è un po ' spettacolo diverso . Ho un FrameLayout con due figli . Solo uno dei bambini deve essere ' attivo ' in un dato momento, e mentre il secondo è attivo il primo dovrebbe non elaborare qualsiasi ingresso . La mia soluzione :

    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 @

Ho cercato di mettere SlidingDrawer nel RelativeLayout, invece di LinearLayout . e set mySlidingDrawer.bringToFront() In metodo di apertura .

Quindi penso che questo può essere una soluzione .