我有一个
Fragment
,用于进行搜索。它的布局在顶部有一个“搜索栏”,然后有一个 TextView
和一个 RecyclerView
用于显示结果。我想在用户滚动时隐藏/显示搜索栏和TextView
,就像在这个video中一样,但我的想法是隐藏搜索栏和Toolbar
,而不是隐藏TextView
。像这样的东西:
我已经在
Toolbar
中有一个自定义 activity_main.xml
必须在整个活动中固定,只有搜索栏和 TextView
需要隐藏/显示。
我尝试使用
CoordinatorLayout
让它工作,但我发现的所有示例都是显示/隐藏 Toolbar
,因此我不确定我是否可以使用 CoordinatorLayout
得到我想要的东西。
在多次尝试
CoordinatorLayout
之后,我决定寻找另一种解决方案并找到了这个。但是,它不像示例中那样工作。首先,它破坏了我的部分代码功能,其次,虽然搜索栏和 TextView
被隐藏/显示,但 RecyclerView
保持它的位置而不是取代其他两个视图:
最后,在寻找更多解决方案时,我找到了这个,它使用了
MotionLayout
。除了一个问题外,它工作得很好。当 RecyclerView
为空时,其 visibility
为 GONE
或者要显示的项目数可以容纳屏幕的可用空间,用户仍然可以滚动并隐藏搜索栏和 TextView
:
我不期望这种行为,我希望只有当
RecyclerView
对于屏幕来说太大时,视图才会崩溃。怎样才能做到这一点?
最近几天我一直在为此苦苦挣扎,找不到解决方案,希望您能帮助我。在下方找到 XML 文件。提前谢谢你!
活动布置:
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<!-- Contenedor principal para mostrar el Toolbar y el contenido oportuno-->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<!-- Toolbar que hace de ActionBar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</com.google.android.material.appbar.AppBarLayout>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<!-- Menú para moverse por la app -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/menu" />
</androidx.drawerlayout.widget.DrawerLayout>
片段布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.motion.widget.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
motion:layoutDescription="@xml/motionscene"
tools:context=".SearchFragment">
<LinearLayout
android:id="@+id/buscador"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/cyan"
android:orientation="vertical"
android:paddingBottom="16dp"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent"
motion:layout_constraintBottom_toTopOf="@id/num_resultados">
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:background="@drawable/search_view_background"
android:iconifiedByDefault="false"
android:inputType="textPersonName"
android:queryBackground="@android:color/transparent"
android:queryHint="Buscar..." />
<RadioGroup
android:id="@+id/filtro_busqueda"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal">
<RadioButton
android:id="@+id/nom_futbolistico_Rb"
style="@style/SearchRadioButton"
android:checked="true"
android:text="@string/nombre_futbolistico" />
<RadioButton
android:id="@+id/nombre_Rb"
style="@style/SearchRadioButton"
android:layout_marginHorizontal="16dp"
android:text="@string/nombre" />
<RadioButton
android:id="@+id/apellidos_Rb"
style="@style/SearchRadioButton"
android:text="@string/apellidos" />
</RadioGroup>
</LinearLayout>
<TextView
android:id="@+id/num_resultados"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/recycler_view_item_search"
android:gravity="center_horizontal"
android:paddingVertical="8dp"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
android:visibility="gone"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toBottomOf="@id/buscador" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/lista_deportistas_Rv"
android:layout_width="match_parent"
android:layout_height="0dp"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintTop_toBottomOf="@id/num_resultados"
tools:listitem="@layout/listado_deportista_item" />
</androidx.constraintlayout.motion.widget.MotionLayout>
运动场景:
<?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/recogido"
motion:constraintSetStart="@id/expandido">
<OnSwipe
motion:dragDirection="dragUp"
motion:moveWhenScrollAtTop="false"
motion:touchAnchorId="@id/lista_deportistas_Rv"
motion:touchAnchorSide="top" />
</Transition>
<ConstraintSet android:id="@+id/expandido">
<Constraint android:id="@id/buscador" >
<PropertySet android:alpha="1" />
</Constraint>
<Constraint android:id="@id/num_resultados">
<PropertySet android:alpha="1"
motion:visibilityMode="ignore"/>
</Constraint>
<Constraint android:id="@id/lista_deportistas_Rv">
<PropertySet motion:visibilityMode="ignore"/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/recogido">
<Constraint
android:id="@id/buscador"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintBottom_toTopOf="parent">
<PropertySet android:alpha="0" />
</Constraint>
<Constraint
android:id="@id/num_resultados"
android:layout_width="match_parent"
android:layout_height="wrap_content"
motion:visibilityMode="ignore"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintBottom_toTopOf="parent">
<PropertySet android:alpha="0" />
</Constraint>
<Constraint android:id="@id/lista_deportistas_Rv">
<PropertySet motion:visibilityMode="ignore"/>
</Constraint>
</ConstraintSet>
</MotionScene>