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

在RecyclerView的中心显示加载视图

  •  0
  • ant2009  · 技术社区  · 8 年前

    我有一个使用协调器布局作为根的布局,它有一个可折叠的工具栏和一个头视图。在下面,我有一个RecyclerView,其中显示项目列表。

    在RecyclerView的中心显示LoadingView时出现问题。我一直在尝试使用约束布局,但没有成功。因此,如果标题折叠或展开,它应该始终显示在RecyclerView的中心,而不是实际屏幕上。

    这是我的布局:

    <?xml version=“1.0”encoding=“utf-8”?gt;
    <android.support.design.widget.coordinatorlayout 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/搜索结果\u容器”
    android:layout_width=“匹配父级”
    android:layout_height=“匹配父级”
    android:fitsSystemWindows=“真”
    android:orientation=“垂直”>
    
    <android.support.design.widget.appbar布局
    android:id=“@+id/appbarlayout”
    android:layout_width=“匹配父级”
    android:layout_height=“包装内容”
    android:fitsSystemWindows=“真”
    android:theme=“@style/themeoverlay.appcompat.dark.actionbar”>
    
    <android.support.design.widget.collapsingtoolbar布局
    安卓:id=“@+id/collapsingtoolbarlayout”
    android:layout_width=“匹配父级”
    android:layout_height=“匹配父级”
    android:fitsSystemWindows=“真”
    app:collapseditlegravity=“左”
    app:contentScrim=“@color/工具栏\u color”
    app:layout_scrollflags=“滚动退出折叠快照”>
    
    <包括
    android:id=“@+id/标题”
    layout=“@layout/list_header”
    android:layout_width=“匹配父级”
    android:layout_height=“包装内容”
    app:layout_collapseMode=“视差”
    app:layout ou collapsParallaxMultiplier=“0.3”/>
    
    <C工具栏
    android:id=“@+id/工具栏”
    android:layout_width=“匹配父级”
    android:layout“height=”?收件人/操作栏大小“
    app:layout_collapseMode=“pin”/>
    
    </android.support.design.widget.collapsingtoolbarlayout>
    </android.support.design.widget.appbarlayout>
    
    <android.support.constraint.constraintlayout(限制布局)
    android:layout_width=“匹配父级”
    android:layout_height=“匹配父级”
    app:layout_behavior=“@string/appbar_滚动_view_behavior”>
    
    <android.support.v7.widget.recyclerview
    安卓:id=“@+id/contentview”
    android:layout_width=“匹配父级”
    android:layout_height=“match_parent”/>
    
    <自定义覆盖加载视图
    android:id=“@+id/loadingView”
    android:layout_width=“匹配父级”
    android:layout_height=“包装内容”
    app:layout_constraintbottom_tobottomof=“@id/contentview”
    app:layout_constraintop_totopof=“@id/contentview”
    android:visibility=“消失”
    工具:visibility=“visible”/>gt;
    </android.support.constraint.constraintlayout>
    </android.support.design.widget.coordinatorlayout>
    

    更新: 这是我更新你的答案时得到的图像。如您所见,图像显示在标题的正下方。但是,我希望它显示在RecyclerView的中心。

    .

    在RecyclerView的中心显示LoadingView时出现问题。我一直在尝试使用约束布局,但没有成功。因此,如果标题折叠或展开,它应该始终显示在RecyclerView的中心,而不是实际屏幕。

    这是我的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout 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/search_result_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        android:orientation="vertical">
    
        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapsingToolbarLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:collapsedTitleGravity="left"
                app:contentScrim="@color/toolbar_color"
                app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
    
                <include
                    android:id="@+id/header"
                    layout="@layout/list_header"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_collapseMode="parallax"
                    app:layout_collapseParallaxMultiplier="0.3" />
    
                <cToolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    app:layout_collapseMode="pin" />
    
            </android.support.design.widget.CollapsingToolbarLayout>
        </android.support.design.widget.AppBarLayout>
    
        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
            <android.support.v7.widget.RecyclerView
                android:id="@+id/contentView"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    
            <CustomOverlayLoadingView
                android:id="@+id/loadingView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="@id/contentView"
                app:layout_constraintTop_toTopOf="@id/contentView"
                android:visibility="gone"
                tools:visibility="visible" />
        </android.support.constraint.ConstraintLayout>
    </android.support.design.widget.CoordinatorLayout> 
    

    更新: 这是我更新你的答案时得到的图像。如您所见,图像显示在标题的正下方。但是,我希望它显示在RecyclerView的中心。

    2 回复  |  直到 8 年前
        1
  •  1
  •   tj2611    8 年前

    试试这个……:)

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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/search_result_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">
    
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:collapsedTitleGravity="left"
            app:contentScrim="@color/toolbar_color"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
    
            <include
                android:id="@+id/header"
                layout="@layout/list_header"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.3" />
    
            <cToolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />
    
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_below="@+id/appBarLayout">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/contentView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    
        <CustomOverlayLoadingView
            android:id="@+id/loadingView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:visibility="gone"
            tools:visibility="visible" />
    </RelativeLayout>
    </RelativeLayout>
    
        2
  •  1
  •   Pawel Laskowski    8 年前

    RecyclerView 应该在这里帮忙。这就是为什么 ConstraintLayout 主要内容如下:

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/contentView"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    
        <CustomOverlayLoadingView
            android:id="@+id/loadingView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="@id/contentView"
            app:layout_constraintEnd_toEndOf="@id/contentView"
            app:layout_constraintStart_toStartOf="@id/contentView"
            app:layout_constraintTop_toTopOf="@id/contentView"
            android:visibility="gone"
            tools:visibility="visible" />
    
    </android.support.constraint.ConstraintLayout>