Android RecyclerView GridLayoutManager居中查看项目并保持相同宽度

Android RecyclerView GridLayoutManager居中查看项目并保持相同宽度,android,android-recyclerview,gridlayoutmanager,android-flexboxlayout,Android,Android Recyclerview,Gridlayoutmanager,Android Flexboxlayout,我正在使用布局管理器将此RecyclerView配置为: recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); 我的具体情况是,子项没有预定义的宽度。相反,我将它们的宽度设置为 android:layout_width="match_parent" 然后我希望GridLayoutManager为每个项目提供1/3的可用空间 到目前为止还不错,但我希望如果最后一行中只有1或2个项目要显示,我希望将它们居

我正在使用布局管理器将此
RecyclerView
配置为:

recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
我的具体情况是,子项没有预定义的宽度。相反,我将它们的宽度设置为

android:layout_width="match_parent"
然后我希望
GridLayoutManager
为每个项目提供1/3的可用空间

到目前为止还不错,但我希望如果最后一行中只有1或2个项目要显示,我希望将它们居中

我尝试了解决方案,但得到的结果是:

正如您在最后一行中所看到的,项目被拉伸到布局的边缘,并且父项的宽度在它们之间被划分。这是因为正如我所说,它们的宽度没有预先确定

我期望的是计算项目宽度,因为每行显示3个项目,然后将其居中。如图所示:


有什么方法可以让我用
GridLayoutManager
或者甚至用
FlexboxLayoutManager
来实现这一点吗?

你可以通过在
GridLayout
中使用
线性布局来实现这一效果,我的答案对你有帮助吗?:)@不幸的是,这并不能解决我的问题。我希望项目之间有相同的大小和相同的距离。如果最后一行中的项目更加居中,并且与第一行中的项目保持相同的距离,则可以接受您的解决方案。谢谢你的回答。
    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:ignore="MissingConstraints"
        android:layout_marginTop="20dp"
        android:id="@+id/l1">

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#000000" />

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#000000" />

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#000000" />

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>
    </LinearLayout>

    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:ignore="MissingConstraints"
        android:layout_below="@+id/l1"
        android:layout_marginTop="20dp"
        >

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#000000" />

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>

        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:background="#000000" />

        <Space
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="1">
        </Space>
    </LinearLayout>
</RelativeLayout>