Comment puis-je désactiver une vue derrière mon SlidingDrawer dans Android ?

? Sara @ | Original: StackOverFlow
---

Je ai un SlidingDrawer qui apparaît dans le bas de l'écran et remplit l'écran environ 80 % . Même si la vue SlidingDrawer est au point, il est toujours possible de cliquer sur les éléments, boutons et autres éléments dans la vue qui est derrière la SlidingDrawer . Lorsque SlidingDrawer est actif / tiré vers le haut / la mise au point, je tiens à désactiver toute la vue derrière elle afin de ne pas être en mesure de recevoir des clics et des touches . Y at-il une bonne façon de désactiver une vue entière ? Je ai essayé setEnable ( faux) et setClickable (faux ) mais aucun d' entre eux travaillent .

Help?

---

Top 5 Répondre

1synic @

Je ne sais pas si cela va fonctionner, mais ce est la peine d'essayer . appel  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 Voir sur votre conteneur ( celui que le tiroir coulissant glisse sur ) .

2Joe... @

Voici une façon de contourner ce problème ( je avais besoin d'une solution aussi ) - saisir le LinearLayout qui détient le contenu et ajouter un clic auditeur. Demandez le clic auditeur répond aux clics ( jeter, peu importe) - et cela se arrête alors il se propageant à la vue ci-dessous le tiroir coulissant - cela fonctionne pour moi - et il ne bloque pas les autres objets dans le tiroir .

3kellogs @

La réponse de Joe n'a pas fait l'affaire pour moi . Mon scénario est un diferent bits. Je ai un FrameLayout avec deux enfants . Seulement un des enfants doit être «actif» à un moment donné, et tandis que le second est actif le premier ne devrait plus traiter ne importe quelle entrée . Ma solution :

    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 @

Je ai essayé de mettre SlidingDrawer dans le RelativeLayout, au lieu de «____» . et définir «____» Dans la méthode d'ouverture .

Donc, je pense que cela peut être une solution .