Показать снэк-бар выше FAB в androidx - PullRequest
0 голосов
/ 12 сентября 2018

пытается создать приложение с помощью androidx.мой макет

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.photo.PhotoFragment">


    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerPhoto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_anchorGravity="top|center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:itemCount="48"
        tools:layoutManager="GridLayoutManager"
        tools:listitem="@layout/recycler_photo_item"
        tools:spanCount="3" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/photoCoordinator"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        >

        <com.google.android.material.bottomappbar.BottomAppBar
            android:id="@+id/mainBottomAppBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            app:fabAlignmentMode="center"
            android:backgroundTint="@color/colorPrimary"
            app:fabCradleMargin="@dimen/cradle_margin"
            app:fabCradleRoundedCornerRadius="@dimen/corner_radius"
            app:hideOnScroll="true"
            app:navigationIcon="@drawable/ic_menu_24px" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/photoFab"
            style="@style/Widget.MaterialComponents.FloatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_camera_alt_24px"
            app:layout_anchor="@id/mainBottomAppBar" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

и выглядит так enter image description here когда я показываю снэк-бар, он выглядит так enter image description here Google говорит, что снэк-бар должен показываться сверхуПанель приложений и потрясающий, но я не могу при попытке показать снэк-бар с нижним полем

val snackbarView = snackbar.view
    val params = snackbarView.layoutParams as CoordinatorLayout.LayoutParams

    params.setMargins(
            params.leftMargin + marginSide,
            params.topMargin,
            params.rightMargin + marginSide,
            params.bottomMargin + marginBottom
    )

    snackbarView.layoutParams = params

потрясающие ups до!как я могу показать снэк-бар над панелью приложений Fab и нижней?простите за мой английский!

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Похоже, Google обновил рекомендации, но не обновил SDK, а также собственные приложения (например, Gmail).

Я сообщил об этом здесь:

https://issuetracker.google.com/issues/122163315

0 голосов
/ 12 сентября 2018

Итак, проблема, с которой вы столкнулись, заключается в том, что Google все еще не обновил поведение FAB, чтобы соответствовать новому дизайну.Поскольку ваш FAB находится в макете координатора, и вы используете его для запуска своей закусочной, FAB перемещается вверх, чтобы приспособиться (старое поведение)

Несколько решений:

  1. ПереместитеFAB вне макета координатора и просто наложите его поверх нижней панели приложения и его родительского макета координатора
    • Это может испортить любое взаимодействие FAB с нижней панелью приложения.Вероятно, это не очень хорошее долгосрочное решение, поскольку поместить FAB в координатор, как правило, хорошая идея
  2. Удалить поведение FAB

    • Это удалит любое поведение, которое делал FAB.Тот же недостаток, что и удаление его из координатора, за исключением того, что его намного проще изменить.Я бы предпочел это решение первому по этой причине
    • Вы можете сделать это в XML, используя:

      app.layout_behavior=""
      
    • Или сделать это в коде с помощьюиспользуя:

      CoordinatorLayout.LayoutParams params = 
                      (CoordinatorLayout.LayoutParams) 
      yourView.getLayoutParams();
      params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
      yourView.requestLayout();
      

Похоже, Google все еще обновляет источник поведения.После их завершения вы, вероятно, захотите удалить это, чтобы оно могло использовать свое поведение по умолчанию:

https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java

...