gpt4 book ai didi

android - MotionLayout 组可见性问题

转载 作者:行者123 更新时间:2023-12-03 20:43:31 31 4
gpt4 key购买 nike

我有一个约束布局,其中包含一个 RecyclerView、一个 TextInputEditText、一个约束组(它处理 RecyclerView 和 TextInputEditText 的可见性、一个 ImageView 和一个 LottieAnimationView。
它是这样工作的:

  • 启动时,只有 LottieAnimation 可见,直到我的 LiveData 从 repo 获取数据并成功更新。
  • 获取数据后,LottieView 被隐藏并显示 Group 可见性,依次显示 RecyclerView 和 TextInputEditText。
  • 仅当出现错误时才会显示 ImageView,然后隐藏除 ImageView 之外的所有其他 View 。

  • 现在我希望当我滚动我的 RecyclerView 时,TextInputEditText 也会滚动。 (由于滚动时的分页滞后,我无法使用 NestedScrollView)。
    我使用了 MotionLayout。除非它不能正常工作。我的能见度坏了。我的 Lottie Animation 停留在屏幕上。我的布局是这样的:
    fragment .xml:
    <?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>

    <variable
    name="ViewModel"
    type="...AllServicesViewModel" />

    <import type="android.view.View" />

    </data>

    <androidx.constraintlayout.motion.widget.MotionLayout
    android:id="@+id/Root_All_Services"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/scene_all_services_header">

    <ImageView
    android:id="@+id/Illus_Error"
    android:layout_width="350dp"
    android:layout_height="350dp"
    android:layout_margin="16dp"
    android:contentDescription="@string/icd_error_services_unavailable"
    android:scaleType="centerCrop"
    android:src="@drawable/il_error"
    android:visibility="@{ViewModel.message != null ? View.VISIBLE : View.GONE}"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    tools:src="@drawable/il_error" />

    <androidx.constraintlayout.widget.Group
    android:id="@+id/Group_Main_Content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="@{ViewModel.loading || ViewModel.message != null ? View.GONE : View.VISIBLE}"
    app:constraint_referenced_ids="TextField_Search,RecyclerView_Services" />

    <com.google.android.material.textfield.TextInputEditText
    android:id="@+id/TextField_Search"
    style="@style/Mes.TextField.Search"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp"
    android:drawablePadding="-24dp"
    android:hint="@string/action_search"
    android:text="@={ViewModel.searchQuery}"
    android:imeOptions="actionSearch"
    android:padding="24dp"
    android:singleLine="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
    android:id="@+id/RecyclerView_Services"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="24dp"
    android:clipToPadding="false"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/TextField_Search" />

    <com.airbnb.lottie.LottieAnimationView
    android:id="@+id/Anim_Loading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="@{!ViewModel.loading || ViewModel.message != null? View.GONE : View.VISIBLE}"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:lottie_autoPlay="true"
    app:lottie_loop="true"
    app:lottie_rawRes="@raw/raw_anim_loading_services" />

    </androidx.constraintlayout.motion.widget.MotionLayout>

    </layout>
    scene_all_services_header.xml
    <?xml version="1.0" encoding="utf-8"?>

    <MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <Transition
    motion:constraintSetEnd="@+id/end"
    motion:constraintSetStart="@+id/start">
    <OnSwipe
    motion:dragDirection="dragUp"
    motion:onTouchUp="stop"
    motion:touchAnchorId="@+id/TextField_Search" />
    </Transition>

    <ConstraintSet android:id="@+id/start">
    <Constraint
    android:id="@+id/TextField_Search"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    motion:layout_constraintEnd_toEndOf="parent"
    motion:layout_constraintStart_toStartOf="parent"
    motion:layout_constraintTop_toTopOf="parent" />

    <ConstraintOverride
    android:id="@+id/RecyclerView_Services"
    motion:visibilityMode="ignore" />

    <Constraint
    android:id="@+id/Anim_Loading"
    motion:visibilityMode="ignore" />

    <Constraint
    android:id="@+id/Illus_Error"
    motion:visibilityMode="ignore" />

    </ConstraintSet>

    <ConstraintSet android:id="@+id/end">
    <Constraint
    android:id="@+id/TextField_Search"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    motion:layout_constraintBottom_toTopOf="parent"
    motion:layout_constraintEnd_toEndOf="parent"
    motion:layout_constraintStart_toStartOf="parent" />

    <ConstraintOverride
    android:id="@+id/RecyclerView_Services"
    motion:visibilityMode="ignore" />

    <Constraint
    android:id="@+id/Anim_Loading"
    motion:visibilityMode="ignore" />

    <Constraint
    android:id="@+id/Illus_Error"
    motion:visibilityMode="ignore" />

    </ConstraintSet>

    </MotionScene>
    以下是添加 MotionLayout 之前和之后的工作示例
    之前
    before
    之后
    after
    有人可以帮我吗?

    最佳答案

     <Constraint
    android:id="@+id/RecyclerView_Services"
    motion:visibilityMode="ignore" />
    以上消除了对该 View 的所有约束!
    <Constraint android:id="@+id/RecyclerView_Services">
    <PropertySet motion:visibilityMode="ignore"/>
    </Constraint>
    上面删除了所有属性,只留下了忽略。
    2.1 支持...
     <ConstraintOverride 
    android:id="@+id/RecyclerView_Services"
    motion:visibilityMode="ignore" />
    这会做你所期望的。
    约束覆盖 :
  • 添加或修改属性
  • 不是 IDE 不太支持。
  • 不支持 layout_constraint{Top,Bottom,Left,Right,Start,End}_*=".."
  • 关于android - MotionLayout 组可见性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66358940/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com