2017-09-16 163 views
3

我添加了Snackbar到我的应用程序。问题是在API 19中它不在屏幕的底部。Android KitKat:Snackbar不在屏幕的底部

enter image description here

在API 21这是确定。这里是我的布局

<?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> 

而且我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(); 
} 

你有任何想法如何解决呢?

更新:似乎从底部的边缘真的是随机的,我重新运行模拟器,看看这个。

enter image description here

enter image description here

回答

1

此问题可以通过移动其显示小吃吧到onGlobalLayout(代码)等以下来避免。

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); 
       } 
      } 
     });