2016-10-18 3 views
1

Dans onCreateView(), j'ai essayé de définir certaines propriétés, mais le dialogue DialogFragment continue à être tapé à l'extérieur.Comment faire un BottomSheetDialogFragment non-modal?

Je voudrais que le fragment reste presque tout le temps pendant que l'utilisateur interagit avec d'autres parties de l'application.

Ceci est une classe qui étend BottomSheetDialogFragment:

@Override 
    public View onCreateView(
     LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    ... 

    // makes background non-interactive 
    getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    // prevents dimming of background 
    getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 

    // no effect? 
    getDialog().setCanceledOnTouchOutside(false); 
    this.setCancelable(false); 

    return view; 
    } 
+0

Essayez 'setCancelable (false)'. –

+0

Désolé, c'était dans mon code original, mais cela n'a eu aucun effet. D'autres suggestions ou documents pouvant expliquer cela? – dmonopoly

+0

Pourquoi 'this.setCancelable (false);' not 'getDialog(). SetCancelable (false);' (ou vice versa tous les appels sur l'objet 'this')? –

Répondre

0

code comme:

public class MyDialogFragment extends DialogFragment { 

     ... 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); 
      builder.setTitle(...) 
        .setMessage(...) 
        .setCancelable(false); 

      ... 

      Dialog dialog = builder.create(); 
      dialog.getWindow(); 
      return dialog; 
     } 

     ... 

    } 

fonctionne pour moi.