Android - 隐藏底部 Sheet peekview
Android - Bottom Sheet peekview hidden
正如标题所说,我的屁股有问题sheet。
我想要的 sheet 是一个带有动态项目的 RecyclerView,可以随时更改。 RecyclerView 前后也有组件。为了方便,我在下面放了一个片段sheet.
这是我的屁股sheet :
<android.support.v4.widget.NestedScrollView
android:id="@+id/bsControllers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_peekHeight="@dimen/controllerPeekHeight"
app:layout_behavior="@string/bottom_sheet_behavior">
<FrameLayout
android:id="@+id/flBsContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_hideable="false"/>
</android.support.v4.widget.NestedScrollView>
这是我的片段:
<android.support.constraint.ConstraintLayout
android:id="@+id/clControllerSheetRoot"
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
tools:context="fr.mld.dmg.view.fragment.ControllerSheetFragment">
<View
android:id="@+id/vPeek"
android:layout_width="0dp"
android:layout_height="@dimen/controllerPeekHeight"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@color/green"/>
<ProgressBar
android:id="@+id/pbControllerScan"
android:layout_width="0dp"
android:layout_height="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vPeek"/>
<ImageView
android:id="@+id/ivBle"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="8dp"
android:src="@drawable/ic_thread_online"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<ImageView
android:id="@+id/ivExpansionIndicator"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_arrow_down"
android:tint="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<TextView
android:id="@+id/tvControllerCount"
style="@style/BoldWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/ivLight"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/ivBle"
app:layout_constraintTop_toTopOf="@+id/vPeek"
tools:text="3"/>
<ImageView
android:id="@+id/ivLight"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_light_unselected"
android:tint="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/tvConnected"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tvControllerCount"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<TextView
android:id="@+id/tvConnected"
style="@style/BoldWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/connected"
android:textAllCaps="true"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/ivExpansionIndicator"
app:layout_constraintStart_toEndOf="@+id/ivLight"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rvControllers"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/bConnectAll"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vPeek"/>
<Button
android:id="@+id/bConnectAll"
style="@style/Button.ButtonWhiteStroke"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="16dp"
android:text="@string/connect_all"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bUpdateAll"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"/>
<Button
android:id="@+id/bUpdateAll"
style="@style/Button.ButtonWhiteStroke"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:text="@string/update_all"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/bConnectAll"/>
<View
android:id="@+id/vTagUpdate"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginEnd="4dp"
android:layout_marginTop="4dp"
android:background="@drawable/tag_warning"
app:layout_constraintEnd_toEndOf="@+id/bUpdateAll"
app:layout_constraintTop_toTopOf="@+id/bUpdateAll"/>
</android.support.constraint.ConstraintLayout>
我的问题
首次启动时,底部 sheet 向下滚动 peek 高度。当我展开它然后折叠它时,它不会向下滚动 peek 高度。此外,只有当我的 RecyclerView 有太多项目无法适应屏幕高度时才会发生这种情况,否则它工作正常。
我已经尝试过的
- 我试图将 NestedScrollView 放入 Fragment 中。仍然向下滚动 peek 高度。
- 我尝试使用 nestedscrollview.scrollTo(0,0) 使 NestedScrollView 滚动。没有任何改变。
- 我试图完全删除 NestedScrollView。 RecyclerView 前后重叠组件。
我真的迷路了,我真的不知道该怎么办了。任何帮助将不胜感激。
编辑
一段视频可以更清楚地说明我的问题:
https://youtu.be/y8KhKW9KS_E
在@Cheticamp 的带领下,我终于找到了问题所在。在创建时,似乎 RecyclerView 正在获得焦点,导致 NestedScrollView 滚动到它的顶部。
我所要做的就是将 android:focusableInTouchMode="true"
设置为布局的绿色背景视图。然后,它首先获得焦点并且不会滚动到 RecyclerView 的顶部。
非常感谢所有帮助我解决问题的人!
正如标题所说,我的屁股有问题sheet。
我想要的 sheet 是一个带有动态项目的 RecyclerView,可以随时更改。 RecyclerView 前后也有组件。为了方便,我在下面放了一个片段sheet.
这是我的屁股sheet :
<android.support.v4.widget.NestedScrollView
android:id="@+id/bsControllers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_peekHeight="@dimen/controllerPeekHeight"
app:layout_behavior="@string/bottom_sheet_behavior">
<FrameLayout
android:id="@+id/flBsContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:behavior_hideable="false"/>
</android.support.v4.widget.NestedScrollView>
这是我的片段:
<android.support.constraint.ConstraintLayout
android:id="@+id/clControllerSheetRoot"
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
tools:context="fr.mld.dmg.view.fragment.ControllerSheetFragment">
<View
android:id="@+id/vPeek"
android:layout_width="0dp"
android:layout_height="@dimen/controllerPeekHeight"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:background="@color/green"/>
<ProgressBar
android:id="@+id/pbControllerScan"
android:layout_width="0dp"
android:layout_height="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vPeek"/>
<ImageView
android:id="@+id/ivBle"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginStart="8dp"
android:src="@drawable/ic_thread_online"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<ImageView
android:id="@+id/ivExpansionIndicator"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_arrow_down"
android:tint="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<TextView
android:id="@+id/tvControllerCount"
style="@style/BoldWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/ivLight"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/ivBle"
app:layout_constraintTop_toTopOf="@+id/vPeek"
tools:text="3"/>
<ImageView
android:id="@+id/ivLight"
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_light_unselected"
android:tint="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/tvConnected"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/tvControllerCount"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<TextView
android:id="@+id/tvConnected"
style="@style/BoldWhite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/connected"
android:textAllCaps="true"
app:layout_constraintBottom_toBottomOf="@+id/vPeek"
app:layout_constraintEnd_toStartOf="@+id/ivExpansionIndicator"
app:layout_constraintStart_toEndOf="@+id/ivLight"
app:layout_constraintTop_toTopOf="@+id/vPeek"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rvControllers"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/bConnectAll"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vPeek"/>
<Button
android:id="@+id/bConnectAll"
style="@style/Button.ButtonWhiteStroke"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="16dp"
android:text="@string/connect_all"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/bUpdateAll"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"/>
<Button
android:id="@+id/bUpdateAll"
style="@style/Button.ButtonWhiteStroke"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
android:layout_marginStart="8dp"
android:text="@string/update_all"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/bConnectAll"/>
<View
android:id="@+id/vTagUpdate"
android:layout_width="8dp"
android:layout_height="8dp"
android:layout_marginEnd="4dp"
android:layout_marginTop="4dp"
android:background="@drawable/tag_warning"
app:layout_constraintEnd_toEndOf="@+id/bUpdateAll"
app:layout_constraintTop_toTopOf="@+id/bUpdateAll"/>
</android.support.constraint.ConstraintLayout>
我的问题
首次启动时,底部 sheet 向下滚动 peek 高度。当我展开它然后折叠它时,它不会向下滚动 peek 高度。此外,只有当我的 RecyclerView 有太多项目无法适应屏幕高度时才会发生这种情况,否则它工作正常。
我已经尝试过的
- 我试图将 NestedScrollView 放入 Fragment 中。仍然向下滚动 peek 高度。
- 我尝试使用 nestedscrollview.scrollTo(0,0) 使 NestedScrollView 滚动。没有任何改变。
- 我试图完全删除 NestedScrollView。 RecyclerView 前后重叠组件。
我真的迷路了,我真的不知道该怎么办了。任何帮助将不胜感激。
编辑 一段视频可以更清楚地说明我的问题: https://youtu.be/y8KhKW9KS_E
在@Cheticamp 的带领下,我终于找到了问题所在。在创建时,似乎 RecyclerView 正在获得焦点,导致 NestedScrollView 滚动到它的顶部。
我所要做的就是将 android:focusableInTouchMode="true"
设置为布局的绿色背景视图。然后,它首先获得焦点并且不会滚动到 RecyclerView 的顶部。
非常感谢所有帮助我解决问题的人!