Pergunta

Estou usando um DialogFragment e, embora tenha definido com êxito uma imagem para fechar (ou seja, dispensar) a caixa de diálogo quando pressionada, estou tendo dificuldade em encontrar a maneira de dispensar a caixa de diálogo quando o usuário clica em qualquer lugar fora dela, apenascomo funciona com diálogos normais.Eu pensei que haveria algum tipo de

dialogFragment.setCanceledOnTouchOutside(true);

ligue, mas não vejo isso na documentação.

Isso é possível com DialogFragment?Ou estou procurando nos lugares errados?Tentei interceptar eventos de toque na atividade 'pai', mas, além de não receber nenhum evento de toque, não me pareceu certo.

Foi útil?

Solução

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

Deve ser chamado em onCreateView (como Apurv Gupta apontou).

Outras dicas

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       ...
       getDialog().setCanceledOnTouchOutside(true);
       ... 
       }
    /** The system calls this only when creating the layout in a dialog. */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCanceledOnTouchOutside(true);

        return dialog;
    }

Muitas respostas aqui, mas o aplicativo falha quando a caixa de diálogo é aberta. Escrever getDialog().setCanceledOnTouchOutside(true); dentro de onCreateView não funcionou e travou meu aplicativo.

(Estou usando AppCompatActivity como minha BaseActivity e android.app.DialogFragment como meu Fragment).

O que funciona é uma das seguintes linhas:

getDialog (). setCanceledOnTouchOutside (true);

OU

this.getDialog (). setCanceledOnTouchOutside (true);

dentro do onActivityCreated como

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom;
        //getDialog().getWindow().setDimAmount(0.85f);
        getDialog().setCanceledOnTouchOutside(true);//See here is the code
    }

O que não usar:

DialogFragment.getDialog (). setCanceledOnTouchOutside (false);

lança o seguinte erro

 insira a descrição da imagem aqui

E escrever o código em onCreateView trava o aplicativo! Atualize a resposta se encontrar algo errado.

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

Foi um erro de digitação.Eu tive o mesmo problema.Isso funciona bem para Java e Mono para Android Mono será:

this.getDialog().SetCanceledOnTouchOutside(false);

Eu recomendaria usar minha solução somente depois de experimentar as soluções acima.Descrevi minha solução aqui .Para resumir, estou verificando os limites de toque de DialogFragment.getView ().Quando os pontos de contato estão fora do DialogFragment, estou dispensando o Dialog.

            Dialog.SetCanceledOnTouchOutside(true);

Funcionou para mim
Meu código

class dlgRegister : DialogFragment
        {
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
    ....
    ....
    }
    public override void OnActivityCreated(Bundle savedInstanceState)
            {
                Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
                Dialog.SetCanceledOnTouchOutside(true);
                base.OnActivityCreated(savedInstanceState);
                Dialog.Window.Attributes.WindowAnimations =    Resource.Style.dialog_animation;
            }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top