为什么我在Android中的RecyclerView无法正确显示视图?

时间:2020-06-29 16:47:28

标签: android android-recyclerview

我正在一个简单的项目中,在其中我使用RecyclerView在我的片段中使用GridLayoutManager显示一些ImageView和TextView的网格。我按照Google上的一些教程进行了学习。但是我不知道为什么在垂直视图之间会自动出现这么多的填充,好像只显示两个相邻的视图一样。 Here is a GIF of it

这是我的fragment_home.xml文件,其中将显示recylerview:

id

这是每个视图的我的single_item.xml文件:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/gridrecyle
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="220dp"
    android:gravity="center"
    android:numColumns="2"
    android:columnWidth="180dp"/> 

这是我的fragment_home java类:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
    android:id="@+id/imagessssss"
    android:layout_width="180dp"
    android:layout_margin="10dp"
    android:layout_marginBottom="30dp"
    android:background="@drawable/grid_image"
    android:layout_height="180dp" />
<TextView
    android:id="@+id/texttsss"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:lines="1"
    android:maxLines="1"
    android:textSize="25sp" />
 </LinearLayout>

这是适配器的CustomRecycleAdaptor java类:

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
     final  View vii = inflater.inflate(R.layout.fragment_home, null);
     context = getActivity();
     RecyclerView recyclerView = vii.findViewById(R.id.gridrecyle);
     CustomRecycleAdaptor adaptor = new CustomRecycleAdaptor(context);
     recyclerView.setAdapter(adaptor);
     recyclerView.setLayoutManager(new GridLayoutManager(context , 2 , GridLayoutManager.VERTICAL , false ));

请帮助我,谢谢!

更新:上传了完整的single_actvity.xml

2 个答案:

答案 0 :(得分:0)

请在您的recyclerview XML中尝试以下代码

android:layout_height="wrap_content"
    app:layout_constrainedHeight="true"

更改高度以包装内容并在第二行添加第二行。这样,recyclerview的高度应与其内容高度相同,但绝不能超出准则/约束。

答案 1 :(得分:0)

答案就像@i_A_mok所说的那样,应该将single_item.xml中线性布局的高度设置为“包装内容”,以便仅考虑单个视图而不是全屏(match_parent)。谢谢!