java - Android RecyclerView 网格水平和垂直居中项目而不滚动

标签 java android android-recyclerview gridlayoutmanager

我想在屏幕中间显示 RecyclerView 网格项目(水平和垂直),当项目展开时, View 不会滚动,但它应该调整元素大小以适应新的可用屏幕尺寸。 我希望这张图片能够通过短信表达我想要的内容:

Image

我当前的回收器代码是

    <androidx.recyclerview.widget.RecyclerView
         android:padding="16dp"
         android:id="@+id/recyclerView"
         android:layout_centerInParent="true"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

     </androidx.recyclerview.widget.RecyclerView>

以及项目 View

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <ImageView
            android:layout_width="54dp"
            android:layout_height="54dp"
            android:src="@mipmap/ic_launcher"
            android:layout_centerHorizontal="true"
            android:id="@+id/appIcon"
            android:layout_below="@+id/appName"
            android:contentDescription="icon" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="name"
            android:fontFamily="sans-serif-condensed"
            android:textSize="14dp"
            android:textColor="#000"
            android:singleLine="true"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="5dp"
            android:layout_centerHorizontal="true"
            android:id="@+id/appName"/>

    </RelativeLayout>

Java代码:

recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
    recyclerView.setHasFixedSize(true);
    recyclerView.setItemViewCacheSize(20);
    recyclerView.setDrawingCacheEnabled(true);
    recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    recyclerView.setAdapter(adapter);

欢迎除 RecyclerView(如 GridLayout 或 FlexLayout)之外的任何其他选项

最佳答案

为recyclerview添加一个母 View ,并给我们一个重力/布局重力到中心,就像这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

        <androidx.recyclerview.widget.RecyclerView
            android:padding="16dp"
            android:id="@+id/recyclerView"
            android:layout_centerInParent="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" 
            android:layout_gravity="center" />
</LinearLayout>

关于java - Android RecyclerView 网格水平和垂直居中项目而不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350356/

相关文章:

java - 检查首次启动 android 时是否单击了 Activity 上的按钮

java - 创建一个 ArrayList,其中包含用户定义的最小值和最大值之间的一组数字(JAVA)

Android:LoadStateAdapter 不在 recyclerview 网格布局中居中

java - 如何在不调用 notifyItemChanged 或 DiffUtil 的情况下更新/刷新 RecyclerView 的特定项目?

java - java中从数组中删除元素

java - Intellij 不询问是否在同一窗口或不同窗口中打开项目

java - 原始 fragment 不会进入堆栈后面,它仍然可见

android - 图像未裁剪

android - 不能使用@string 表示法在 AndroidManifest.xml 中定义 <intent-filter>

android - 如果 textview 值超过 2 个字符,一切都会向右移动