Как я могу отключить вид за моей SlidingDrawer в Android ?

? Sara @ | Original: StackOverFlow

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

Help?

Top 5 ответ

1synic @

Я не знаю, если это будет работать, но это стоитпопробовать. вызов  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 на ваш контейнер View ( той, чтоскольжение выдвижных ящиков старше) .

2Joe... @

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

3kellogs @

Ответ Джо не сделать трюк для меня. Мой сценарийнемного Diferent . У меня есть 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);
        }
    }
}

Enjoy!

4Tuan Anh @

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

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