Como posso desativar uma visão por trás da minha SlidingDrawer no Android ?

? Sara @ | Original: StackOverFlow

Eu tenho um SlidingDrawer que aparece na parte inferior da tela e preencha a tela cerca de 80% . Mesmo que a visão SlidingDrawer está em foco, ainda é possível clicar em itens, botões e outros elementos da visão que está por trás da SlidingDrawer . Quando SlidingDrawer é ativo / puxado para cima / em foco, eu quero desativar toda a visão por trás dele para que ele não será capaz de receber cliques e toques . Existe uma boa maneira de desativar uma vista inteira? Eu tentei setEnable (false) e setClickable (false ), mas nenhum deles funciona.

Help?

Top 5 Responder

1synic @

Eu não sei se isso vai funcionar, mas vale a pena tentar. chamada  http://developer.android.com/intl/zh-CN/reference/android/view/ViewGroup.html#setDescendantFocusability%28int%29 em seu recipiente Vista (aquele que a gaveta deslizante desliza sobre ) .

2Joe... @

Aqui está uma maneira de contornar este problema ( eu precisava de uma solução também ) - agarrar o LinearLayout que mantém o conteúdo e adicionar um ouvinte clique. Já o clique ouvinte responder a cliques ( jogar fora, o que for) - e este, em seguida, ele pára de propagação para a exibição abaixo da gaveta deslizante - ele trabalha para mim - e não bloquear os outros itens na gaveta.

3kellogs @

Resposta de Joe não fazer o truque para mim. Meu cenário é um pouco diferent . Eu tenho um FrameLayout com dois filhos. Apenas uma das crianças tem que ser "ativo" em um dado momento, e enquanto o segundo está ativo o primeiro deve deixar de processar qualquer entrada. Minha solução :

    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 @

Eu tentei colocar SlidingDrawer no RelativeLayout, em vez de LinearLayout . e definida mySlidingDrawer.bringToFront() No método de abertura .

Então, eu acho que isso pode ser uma solução.