代码之家  ›  专栏  ›  技术社区  ›  Kazuya

Android-隐藏底部工作表peekview

  •  2
  • Kazuya  · 技术社区  · 7 年前

    正如标题中所说,我的底纸有问题。

    我想要在我的底部工作表中显示一个RecyclerView,其中包含可以随时更改的动态项目。在RecyclerView之前和之后还有一些组件。为了方便起见,我在底纸上放了一块碎片。

    这是我的底片:

    <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>
    

    我的问题

    在第一次启动时,底部板材会向下滚动至peek高度。当我展开它然后折叠它时,它不会向下滚动查看高度。此外,只有当我的RecyclerView有太多的项目无法适应屏幕高度时,才会发生这种情况,否则效果很好。

    我已经试过了

    • 我试图将NestedScrollView放在片段中。仍然向下滚动查看高度。
    • 我尝试使用NestedScrollView使NestedScrollView滚动。滚动到(0,0)。不会改变任何事情。
    • 我试图完全删除NestedScrollView。RecyclerView在组件前后重叠。

    我在这里真的迷路了,我真的不知道该怎么办了。任何帮助都将不胜感激。

    编辑 更清楚地了解我的问题的视频: https://youtu.be/y8KhKW9KS_E

    1 回复  |  直到 7 年前
        1
  •  0
  •   Kazuya    7 年前

    在跟随@Cheticamp之后,我终于找到了问题所在。在创建时,RecyclerView似乎变得更加集中,导致NestedScrollView滚动到它的顶部。

    我所要做的就是付出 android:focusableInTouchMode="true" 到我的布局的绿色背景视图。然后,它首先获取焦点,而不会滚动到RecyclerView的顶部。

    非常感谢所有帮助我解决这个问题的人!