我在我的应用中添加了Snackbar.问题是在API 19中它不在屏幕的底部.
在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(); }
你有任何想法如何解决它?
更新:从底部开始的边距似乎是随机的,我重新运行模拟器并看到这一点.
还有这个
解决方法
通过将显示snackbar的代码移动到onGlobalLayout(),可以避免此问题,如下所示.
binding.root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // snackbar test Snackbar snackbar = Snackbar.make(binding.root,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); } } });