如何使用 RecyclerView 制作具有相同宽度行的列表?
Posted
技术标签:
【中文标题】如何使用 RecyclerView 制作具有相同宽度行的列表?【英文标题】:How to make a list with RecyclerView with rows of the same width? 【发布时间】:2020-12-28 05:23:05 【问题描述】:由于某种原因,我的行大小不一样。我尝试了所有方法,但没有成功。顺便说一下,我对 android 很陌生。
我尝试更改我的 row.xml,但没有成功:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardCornerRadius="3dp"
app:cardElevation="3dp"
app:cardUseCompatPadding="true">
<RelativeLayout
android:layout_
android:layout_
android:padding="16dp"
android:layout_gravity="top">
<ImageView
android:id="@+id/imageIv"
android:layout_
android:layout_
android:background="@drawable/circulo_azul"
android:src="@drawable/transferenciablue" />
<TextView
android:id="@+id/titleTv"
android:layout_
android:layout_
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_toEndOf="@id/imageIv"
android:layout_toRightOf="@id/imageIv"
android:text="Title"
android:textColor="#000"
android:textSize="22sp"
android:textStyle="bold" />
</RelativeLayout>
</androidx.cardview.widget.CardView>
这是activitymain.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation = "vertical"
tools:context=".MainActivity"
>
<androidx.recyclerview.widget.RecyclerView
android:layout_
android:layout_
android:layout_marginTop="100dp"
android:id="@+id/recyclerView"/>
</LinearLayout>
带有 onBindViewHolder 的 MyAdapter.java:
package com.example.demoapp;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import android.content.Context;
public class MyAdapter extends RecyclerView.Adapter<MyHolder>
Context c;
ArrayList<Model> models; // this array list creates a list of arrays which parameters define in my model class
public MyAdapter(Context c, ArrayList<Model> models)
this.c = c;
this.models = models;
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row,null); // this line inflate my row
return new MyHolder(view); // this will return my view to holder class
@Override
public void onBindViewHolder(@NonNull MyHolder myHolder, int i)
myHolder.mTitle.setText(models.get(i).getTitle()); // here i is position
myHolder.mImaeView.setImageResource(models.get(i).getImg());
@Override
public int getItemCount()
return models.size();
MyHolder 类:
package com.example.demoapp;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MyHolder extends RecyclerView.ViewHolder
ImageView mImaeView;
TextView mTitle;
public MyHolder(@NonNull View itemView)
super(itemView);
this.mImaeView = itemView.findViewById(R.id.imageIv);
this.mTitle = itemView.findViewById(R.id.titleTv);
我需要改变什么以使它们看起来成比例?谢谢
【问题讨论】:
将布局更改为线性布局,并将图像视图和电视的权重添加为 2 和 8,并让它们的宽度为 0 dp 你仍然可以使用相对布局也许你应该尝试 alignparentend true for tv 以及当前限制 【参考方案1】:确保您将在 BindViewHolder 中编写此类代码:
@Override
public folder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
View view = LayoutInflater.from(context).inflate(R.layout.your_layout_name,parent,false);
return new viewHolderClass(view);
由于viewGroup无法使用,某些时间宽度无法正常显示
【讨论】:
我将分享我的 BindViewHolder,但它与您的非常相似 inflate 方法我想我只有inflate(R.layout.row,null)
parent 是父视图的对象,它在 oncreateViewHolder 构造函数中的初始值是 ViewGroup 对象
我不认为我有父视图的对象
我添加了 myholder 类【参考方案2】:
将android:layout_gravity="top"
更改为android:layout_gravity="center"
【讨论】:
我改变了它,但行保持在顶部。所以我在回收站视图中添加了一个边距顶部,现在它在中心。但问题是行的大小不同。以上是关于如何使用 RecyclerView 制作具有相同宽度行的列表?的主要内容,如果未能解决你的问题,请参考以下文章