如何在加载项目时设置recyclerview的背景?

时间:2018-11-09 15:34:17

标签: android android-recyclerview

我的应用程序中有一个recyclerview,我想将background设置为黑色。 我已经尝试过使用background属性设置recyclerview的背景,但是它只在具有项目的recyclerview的部分上设置了黑色背景。

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/items"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    tools:listitem="@layout/item_card">
</androidx.recyclerview.widget.RecyclerView>

如果“回收者”视图未填满整个屏幕,则底部始终为白色。当活动刚刚打开并且recyclerview的项目仍在加载时,recyclerview仅显示为空白(空白)。

您基本上如何设置recyclerview的背景?

编辑:这是整个布局

<androidx.core.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/black">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingStart="@dimen/spacing_middle"
        android:paddingEnd="@dimen/spacing_middle"
        android:orientation="vertical">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/items"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/black"
            tools:listitem="@layout/item_card">
        </androidx.recyclerview.widget.RecyclerView>

        <ProgressBar
            android:id="@+id/progress_bar"
            style="@style/Widget.AppCompat.ProgressBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:indeterminate="true"
            android:layout_gravity="center"
            android:indeterminateTint="@color/white"
            android:progressDrawable="@drawable/circular_progress_bar" />
    </LinearLayout>
</androidx.core.widget.NestedScrollView>

3 个答案:

答案 0 :(得分:2)

将recyclerview放在scrollview中从来不是一个好主意,也不需要。您遇到问题的原因是因为您尝试在没有定义高度的对象上匹配父对象,因为它在滚动视图中。
实际上,您唯一需要的两件事是RV和进度条,使用相对布局,将RV对准顶部,将PB对准底部,并将RV设置为PB之上的布局。将相对布局的颜色设置为黑色,您根本不需要为RV着色。

答案 1 :(得分:1)

发生这种情况是由于您如何定义布局。在match_parent LinearLayout内嵌套wrap_content RecyclerView的行为与定义wrap_content RecyclerView差不多。

鉴于您的布局,我认为您正在尝试实现一个“无限” RecyclerView,当您滚动到底部时,该加载更多内容。在这种情况下,您可能需要重新考虑一下布局和应用程序;更好的方法是使用RecyclerView 没有 NestedScrollView,并使用项目类型来确保RecyclerView中的最后一个项目是加载指示器。

如果您不想这样做,建议您在NestedScrollView而不是RecyclerView上设置android:background属性。如果您不希望加载指示器的背景具有相同的黑色背景,则可以将其设置为其他颜色。但是请注意,如果您遵循这种“简单”的方法,则应用程序的性能可能会降低,因为您将失去RecyclerView的回收行为。

答案 2 :(得分:0)

编辑:既然您编辑了问题,就应该定义let labelNode = SKLabelNode(text: text) labelNode.color = .black labelNode.horizontalAlignmentMode = .center labelNode.verticalAlignmentMode = .center labelNode.position = CGPoint(x: node.frame.midX, y: node.frame.midY) labelNode.fontColor = .red addChild(labelNode)

您可以使用minHeight属性来实现。

background