我有这个布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/snackbar_parent"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center" />
<com.google.android.material.button.MaterialButton
android:id="@+id/show_snackbar_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/show_snackbar"
android:theme="@style/Theme.GoogleMaterial.DayNight.Bridge" />
</FrameLayout>
我有一个自定义课程:
public final class MySnackbar<AccountT>
extends BaseTransientBottomBar<MySnackbar<myT>> {
和
super(findTopMostFrameLayout(parent), content, new MySnackbarAnimation(content));
为了:
@VisibleForTesting
protected static ViewGroup findTopMostFrameLayout(View view) {
FrameLayout fallback = null;
while (view != null) {
if (view instanceof FrameLayout) {
fallback = (FrameLayout) view;
}
final ViewParent parent = view.getParent();
view = parent instanceof View ? (View) parent : null;
}
if (fallback != null) {
return fallback;
}
throw new IllegalStateException(
"Snackbar requires a frameLayout in the view hierarchy tree");
}
调用时"show()"
,它会显示一个具有自定义布局的 android 小吃店。
当我显示 amy_snackbar
时,它会在底部导航栏(z 轴)下方看到。
如何使其位于导航栏上方(z 轴和 y 轴)?
我可以确保布局具有不是根视图的框架布局。所以我认为我的布局会好的。不?
我看到了这篇文章,但我需要支持 API 14,并且 onApplyWindowInsets() 来自 Lollipop。