当前位置: 首页 > 知识库问答 >
问题:

如何使用滚动片段容器实现通用布局?

季骏祥
2023-03-14

我有一个带有单个片段的活动的通用布局:

<androidx.coordinatorlayout.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

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

我的大部分活动都重用这个布局,只是插入不同的片段。这些片段由ConstraintLayout、LinearLayout、RecyclerViews等组成。如果片段有RecyclerView,滚动工作正常。但是,如果它包含LinearLayout或ConstraintLayout,我就不能滚动。如果我将FrameLayout包装在NestedScrollView中,那么我可以滚动包含LinearLayout或ConstraintLayout的片段,但是它会破坏具有RecyclView的片段的回收:

<androidx.core.widget.NestedScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.core.widget.NestedScrollView>

我如何使我的通用布局保持通用,并让它处理它可能包含的任何类型的片段的滚动?

共有1个答案

狄钧
2023-03-14

有一个NestedScrollView儿童的属性,

setNestedScrollingEnabled(false)

但是我强烈建议不要同时使用嵌套滚动视图和回收器视图,因为这可能会导致级联问题!我建议在回收器视图中使用ItemViewTypes来处理多种视图。只需添加一个宽度和高度match_parent的回收器视图。然后在你的回收器视图适配器中覆盖getItemViewType并使用该位置来处理要膨胀的布局。

 类似资料:
  • > < li> 我在CollapsingToolbarLayout中有一个imageview,它是AppBarLayout的一部分,如下所示。每当我尝试从imageview开始滚动内容时,它从不滚动,但当我从recycle view/nested scroll view滚动时,它会滚动内容。这是CoordinatorLayout的预期行为吗?如果我想滚动内容,即imageview和我的recycl

  • 我正在尝试使用Thymeleaf呈现电子邮件模板,我希望主题和正文在同一个文件中,但分别呈现。我不想使用spring视图,只想使用普通的。 这有几个问题 首先,我无法获取Thymeleaf仅渲染

  • 本文向大家介绍使用Javascript简单实现图片无缝滚动,包括了使用Javascript简单实现图片无缝滚动的使用技巧和注意事项,需要的朋友参考一下 js无缝滚动效果几乎在任何网页上都能看到它的身影,有的可能是使用插件,其实使用原始的javascript比较简单。 主要的是使用js位置知识。 1.innerHTML:设置或获取元素的html标签 2.scrollLeft:设置或获取位于对象左边界

  • 当我启动一个实现viewpager的活动时,viewpager创建了各种片段。我想为每个片段使用不同的布局,但问题是viewpager最大只显示两个布局(在1之后的所有剩余片段上显示第二个布局)。 下面是实现viewpager的SwipeActivity的代码: 这是片段的代码

  • 我正在尝试使用pyqt5创建一个垂直布局的滚动区,我正在里面放一些标签。我知道,即使是垂直布局,如果文本不适合,也应该水平滚动。但无论我尝试什么,它都不让我滚动。 这是我正在使用的代码: 下面是它的外观: 下面是它的样子: 我希望我的问题是清楚的

  • 因此,我尝试将插入排序与必须传入的通用比较器一起使用。我无法更改方法名称。我如何实现一个比较器来传递到insertionSort方法中?我是java和面向对象编程的新手。 该测试只是一个junit测试。