如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白相关的知识,希望对你有一定的参考价值。

我想在同等高度的屏幕上设置两个RecyclerViews同样覆盖屏幕,问题是,如果我使用高度,因为wrap_content视图不会平均扩展,如果我修复他们的高度或给他们layout_weight,那将会有如果其中一个列表为空,则为空格。

我希望列表不占用空间,如果这些列表为空,并且如果两个列表中都有数据,则它们覆盖屏幕上的相等空间。

答案

您不能仅在XML中执行此操作。你需要一点Java。您使用布局权重在正确的轨道上。

CML框架:

<LinearLayout
    android:orientation="vertical">

    <RecyclerView
        android:id="@+id/recView1"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

    <RecyclerView
        android:id="@+id/recView2"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

</LinearLayout>

下一部分需要用Java完成。

向两个适配器添加数据观察器,并确保覆盖所有方法并让它们调用onChanged()。然后,在onChanged()中,检索当前适配器的计数并适当设置RecyclerView的可见性。

这是第一个例子:

recView1.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
    @Override
    public void onChanged() {
        recView1.setVisibility(recView1.getAdapter().getItemCount() > 0 ? View.VISIBLE : View.GONE);
    }

    @Override
    public void onItemRangeChanged(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
        onChanged();
    }

    @Override
    public void onItemRangeInserted(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeRemoved(int positionStart, int itemCount) {
        onChanged();
    }

    @Override
    public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
        onChanged();
    }
}

实际上,您应该将两个观察者都提取到变量中,以便在包含Activity / Window /的任何内容被销毁时可以取消注册它们。

另一答案

使用下面的代码希望它能工作

int x=this. getResources().getDisplayMetrics().heightPixels*1/2;
recyclerview1.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));
recyclerview2.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));

以上是关于如何在屏幕上设置两个相同大小的RecyclerView,保持高度换行内容以避免空白的主要内容,如果未能解决你的问题,请参考以下文章

如何根据屏幕大小调整按钮的图像和文本大小(自动布局)

我可以在 Android 上拥有两个屏幕大小的乒乓帧缓冲区吗?

如何在颤动的两个不同屏幕上使用相同的块?

如何使图片充满整个电脑屏幕?

如何在图像视图中将图像设置为适合屏幕

如何为不同的屏幕设置自动大小文本