Android - 当 Fab 设置了 layout_behavior 时,无法使 FloatingActionButton 在显示 snackbar 时向上移动

问题描述 投票:0回答:0

在我的应用程序中,我有一个屏幕,在协调器布局中有一个晶圆厂。当显示小吃店时,工厂会随着小吃店的出现而向上移动(这是我所期望的)。 然而,在另一个屏幕上,我的 fab 也在一个协调器中,但是在这个 layoyt 上我有一个占据全屏大小的 recyclerview,所以我在我的 fab 上设置了这个属性

app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
以使其在用户滚动时隐藏和显示通过回收商,但问题是现在,当小吃店出现时,它显示在晶圆厂上方(深度),隐藏它。

我的代码是这样的:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
    android:id="@+id/content_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".presentation.features.lead.list.LeadsListFragment">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_leads"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layoutAnimation="@anim/slide_in_animation"
            android:orientation="vertical"
            android:visibility="gone"
            tools:itemCount="6"
            tools:listitem="@layout/item_lead" />

    </FrameLayout>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/add_fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="16dp"
        android:contentDescription="@string/fab_add_lead_desc"
        android:scaleX="0"
        android:scaleY="0"
        android:visibility="invisible"
        app:backgroundTint="@color/colorPrimary"
        app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
        app:srcCompat="@drawable/ic_add"
        app:tint="@android:color/white" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

我这样展示我的零食:

我设法稍微更改了我的代码,并使小吃店出现在晶圆厂上方(在 Y 轴上)。稍微好一点,但仍然不是我想要的动画(我想保留两个动画)。

有没有办法做这样的事情?

我也试过在我的fab上设置anchorview,但还是没有给我想要的,因为fab现在在屏幕的左上角:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
    android:id="@+id/content_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".presentation.features.lead.list.LeadsListFragment">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_leads"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layoutAnimation="@anim/slide_in_animation"
            android:orientation="vertical"
            android:visibility="gone"
            tools:itemCount="6"
            tools:listitem="@layout/item_lead" />

        <ProgressBar
            android:id="@+id/spinner_recycler"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:indeterminateTint="@color/link"
            android:indeterminateTintMode="src_atop" />

        <TextView
            android:id="@+id/message_error"
            style="@style/TextAppearance.RecyclerViewMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginHorizontal="24dp"
            android:text="@string/message_internal_error"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/message_empty_list"
            style="@style/TextAppearance.RecyclerViewMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginHorizontal="24dp"
            android:text="@string/message_no_lead_added"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/add_fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="16dp"
            android:contentDescription="@string/fab_add_lead_desc"
            android:scaleX="0"
            android:scaleY="0"
            android:visibility="invisible"
            app:backgroundTint="@color/colorPrimary"
            app:layout_anchor="@id/content_view"
            app:layout_anchorGravity="bottom|right"
            app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior"
            app:srcCompat="@drawable/ic_add"
            app:tint="@android:color/white" />

    </FrameLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>
Snackbar.make(binding.addFab, R.string.permission_needed, Snackbar.LENGTH_LONG).apply { anchorview = binding.contentView }.show()

我用的素材库版本是1.8.0:

implementation 'com.google.android.material:material:1.8.0'
android android-recyclerview floating-action-button android-coordinatorlayout coordinator-layout
© www.soinside.com 2019 - 2024. All rights reserved.