Wie kann ich deaktivieren Sie einen Blick hinter meinem SlidingDrawer in Android ?

? Sara @ | Original: StackOverFlow
---

Ich habe eine SlidingDrawer, die aus dem unteren Rand des Bildschirms erscheint und füllt den Bildschirm etwa 80%. Auch wenn die SlidingDrawer Ansicht scharf ist, ist es immer noch möglich, auf Gegenstände, Buttons und andere Elemente in der Ansicht, die hinter dem SlidingDrawer ist klicken . Wenn SlidingDrawer aktiv / hochgezogen / scharf, ich will die ganze Blick hinter sie zu deaktivieren, damit es nicht in der Lage, erhalten Klicks und berührt werden . Gibt es ein guter Weg, um eine gesamte Ansicht deaktivieren ? Ich habe setEnable (false) und setClickable (false) versucht, aber keiner von ihnen zu arbeiten.

Help?

---

Top 5 Antwort

1synic @

Ich weiß nicht, ob dies funktionieren wird, aber es ist einen Versuch wert. rufen Sie  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 auf dem Behälter anzeigen ( die, die die Schublade gleitet über ) .

2Joe... @

Hier ist ein Weg, um dieses Problem ( ich brauchte eine Lösung, auch ) - greifen die Linearlayout, das den Inhalt enthält und fügen Sie einen Klick Zuhörer. Lassen Sie den Klick Hörer Klicks reagieren ( wegwerfen, was auch immer) - und das dann hält er zu der Ansicht, unter der Schublade ausbreiten - es funktioniert für mich - und es nicht zu blockieren die anderen Einzelteile in der Schublade.

3kellogs @

Joes Antwort nicht den Trick für mich tun. Mein Szenario ist ein bisschen eigenartig . Ich habe eine FrameLayout mit zwei Kindern. Nur eines der Kinder zu sein hat zu einem bestimmten Zeitpunkt "aktiv" und der zweite ist der erste aktive sollte nicht länger jede Eingabe zu verarbeiten. Meine Lösung :

    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 @

Ich habe versucht, in der SlidingDrawer zu setzen RelativeLayout, statt LinearLayout . und gesetzt mySlidingDrawer.bringToFront() Im Eröffnungsverfahren.

Also ich denke, das kann eine Lösung sein.