74 votes

Comment faire glisser une boîte de dialogue du bas vers le milieu de l'écran dans Android

Je souhaite afficher un dialogue sur mon activité avec animation. Ma boîte de dialogue glissera du bas de l'activité au milieu de l'activité.

/****Éditer****/

Je suis désolé car ma question n'est pas claire. Je veux dire que ma boîte de dialogue glissera de bas en haut, mais la partie inférieure de la boîte de dialogue est placée en bas de l'activité, comme sur l'image suivante entrez la description de l'image ici

9voto

Juan Cruz Soler Points 6046

Vous pouvez utiliser une feuille de fond modale ( référence ).

  1. Ajouter la bibliothèque de support de conception

     implementation "com.android.support:design:$version_support"
    
  2. Créez un Fragment qui étend BottomSheetDialogFragment et remplace onCreateView

     class BottomDialogFragment : BottomSheetDialogFragment() { 
    
        companion object {
            fun newInstance() = BottomDialogFragment()
        }
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return inflater.inflate(R.layout.dialog_layout, container)
        }
    }
    
  3. Afficher la boîte de dialogue

     val dialog = BottomDialogFragment.newInstance()
    dialog.show(supportFragmentManager, BottomDialogFragment::class.java.simpleName)
    

2voto

Vamsi Smart Points 878

Voici le moyen le plus simple d'animer une boîte de dialogue lors de l'affichage

 dialog.setOnShowListener(new DialogInterface.OnShowListener() {

    @Override
    public void onShow(DialogInterface dialogInterface) {
        View view = dialog.getWindow().getDecorView();
        //for enter from left
        //ObjectAnimator.ofFloat(view, "translationX", -view.getWidth(), 0.0f).start(); 

        //for enter from bottom
        ObjectAnimator.ofFloat(view, "translationY", view.getHeight(), 0.0f).start();
    }

});

En plus de cela, rendez l'arrière-plan de la boîte de dialogue en plein écran et transparent lors de l'animation par le bas

 Window window = dialog.getWindow();
window.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
window.setBackgroundDrawableResource(android.R.color.transparent);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X