2017-09-16 3 views
3

J'ajoute un Snackbar à mon application. Le problème est que dans API 19, ce n'est pas au bas de l'écran.Android KitKat: Snackbar n'est pas dans le bas de l'écran

enter image description here

Dans l'API 21 c'est ok. Voici ma mise en page

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"> 

<data /> 
<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/root" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.constraint.ConstraintLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:focusable="true" 
     android:focusableInTouchMode="true"> 

     <EditText 

      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:hint="@string/home_search_input_hint" 
      android:inputType="text" 
      android:maxLength="30" 
      android:maxLines="1"/> 

    </android.support.constraint.ConstraintLayout> 
</android.support.design.widget.CoordinatorLayout> 
</layout> 

Et mon OnCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    setContentView(R.layout.activity_home); 
    super.onCreate(savedInstanceState); 
    // binding 
    binding = DataBindingUtil.setContentView(this, R.layout.activity_home); 


    // snackbar test 
    Snackbar snackbar = Snackbar.make(binding.root, "Snackbar", Snackbar.LENGTH_INDEFINITE); 

    snackbar.show(); 
} 

Avez-vous des idées sur la façon de le réparer? MISE À JOUR: Il semble que la marge du bas est vraiment aléatoire, je réexécute l'émulateur et vois ceci.

enter image description here

et ce

enter image description here

Répondre

1

Ce problème peut être évité en déplaçant le code qui montre à onGlobalLayout snackbar() comme suit.

binding.root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
     { 
      @Override 
      public void onGlobalLayout() 
      { 
       // snackbar test 
       Snackbar snackbar = Snackbar.make(binding.root, "Snackbar", Snackbar.LENGTH_INDEFINITE); 
       snackbar.show(); 

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
        binding.root.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
       } else { 
        binding.root.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
       } 
      } 
     });