gpt4 book ai didi

java - 使用 GridLayoutManager 使 9 个项目的 Recyclerview 适合屏幕

转载 作者:行者123 更新时间:2023-12-04 23:49:08 25 4
gpt4 key购买 nike

我有一个由 RecyclerView 生成的网格和 GridLayoutManager ,所以在我的情况下,网格上总是只有 9 个项目,所以我希望它们填满整个屏幕。以下是它们在我的屏幕上的外观:
enter image description here
这是activity_main.xml :

<?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"
tools:context=".MainActivity">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
然后, single_item.xml是 :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="120dp"
android:padding="1dp"
>
<ImageView
android:id="@+id/image_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
/>
</RelativeLayout>
我如何附加 Gridlayoutmanager :
        rv = findViewById(R.id.rv);        
ImageAdapter imageAdapter = new ImageAdapter(allBitmaps, MainActivity.this);
mLayoutManager = new GridLayoutManager(MainActivity.this, 3);
rv.setLayoutManager(mLayoutManager);
rv.setAdapter(imageAdapter);
所以我希望网格能够很好地适应整个屏幕,如何才能做到最好?

最佳答案

这是场景:

  • 测量 RecycerView 的宽度和高度在将适配器连接到它之前:
  • 获取所需的RecyclerView将上一步的宽度和高度除以 3 的项目宽度和高度;因为您在水平和垂直方向上有 3 个项目。
  • 将项目宽度和高度传递给 RecyclerView适配器作为参数并将它们存储为字段。

  • 在 Activity onCreate():
    recyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
    if (recyclerView.getViewTreeObserver().isAlive())
    recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);

    float width = (float) recyclerView.getWidth() / 3;
    float height = (float) recyclerView.getHeight() / 3;
    ImageAdapter adapter = new ImageAdapter(context, width, height, allBitmaps);
    recyclerView.setAdapter(adapter);

    return true;
    }
    });

  • 设置ImageView ViewHolder 中的宽度和高度:
  • class ViewHolder extends RecyclerView.ViewHolder {

    ImageView image;

    public ViewHolder(@NonNull View itemView) {
    super(itemView);
    image = itemView.findViewById(R.id.image);

    image.getLayoutParams().width = (int) itemWidth;
    image.getLayoutParams().height = (int) itemHeight;
    }
    }
    我只用 ImageView 对此进行了测试作为列表项布局:
    <?xml version="1.0" encoding="utf-8"?>
    <ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="fitXY" />
    人像预览:
    enter image description here
    景观预览:
    enter image description here

    关于java - 使用 GridLayoutManager 使 9 个项目的 Recyclerview 适合屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68031811/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com