2

我有这个布局

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

4

0 回答 0