Android 如何在RecyclerView中设置所有项目的宽度相同?
我想将所有项目的宽度设置为相同。因为视图周围有一条线,一些文本是长的,而另一些是短的。所以,这些东西看起来像楼梯之类的,但我希望它们看起来干净。(也许,我将来也需要设定同样的高度。) 我想设置项目中最长文本的所有宽度和高度 我设定了这三个值Android 如何在RecyclerView中设置所有项目的宽度相同?,android,android-layout,android-recyclerview,Android,Android Layout,Android Recyclerview,我想将所有项目的宽度设置为相同。因为视图周围有一条线,一些文本是长的,而另一些是短的。所以,这些东西看起来像楼梯之类的,但我希望它们看起来干净。(也许,我将来也需要设定同样的高度。) 我想设置项目中最长文本的所有宽度和高度 我设定了这三个值 var maxLength = 0 var maxWidth = 0 var longestP = 0 并且,无论何时设置新数据,都会初始化这些值 fun setData(data: ArrayList<AnswerData>?, mi
var maxLength = 0
var maxWidth = 0
var longestP = 0
并且,无论何时设置新数据,都会初始化这些值
fun setData(data: ArrayList<AnswerData>?, min: Int?, max: Int?) {
if (data == null) {
items = ArrayList()
} else {
data.forEach {
it.isChecked = false
}
this.items = data
}
this.min = min ?: -1
this.max = max ?: 30
maxLength = 0
maxWidth = 0
longestP = 0
notifyDataSetChanged()
}
它是resizeView()
有什么问题?您可以将单个视图的宽度设置为
匹配父视图
,将回收视图
的宽度设置为包裹内容
。这样,所有视图都将具有相同的宽度,而不是固定的宽度,这取决于最长的视图。如果文本太长,TextView
将自动将文本换行到下一行
我的代码:
供回收商查看
对于单个项目(我使用的是CardView)
我更改了适配器中的某些部分,它可以正常工作
var maxLength = 0
var maxWidth = 0
var maxHeight = 0
var longestP = 0
fun setData(数据:ArrayList?){
...
maxLength=0
maxWidth=0
最大高度=0
longestP=0
...
}
for(i在0中直到items.size){
val length=项目[i]。标签!!.length
如果(长度>最大长度){
最大长度=长度
longestP=i
}
}
if(longestP==位置){
maxWidth=holder.tv!!.width
maxHeight=holder.tv!!.height
项目[位置]。宽度=最大宽度
项目[位置]。高度=最大高度
}else if(holder.tv!!.width
诀窍在于数据模型具有宽度和高度值。并在项目视图的宽度或高度大于0时设置它们。如果要设置固定大小,为什么不在xml文件中设置高度和宽度?我想用最长的文本调整宽度和高度。而且最长的文本每次都不一样。(想不到。)@STyes。如果可以剪切长文本,则可以设置maxLine或maxWidth以使其适合。如果无法剪切文本,则可以设置固定宽度,并使文本自动滚动以显示全文内容(请参阅此处:)。否则,您可以设置固定宽度,并允许文本扩展到2-3行。不,这与我想要实现的不同。我想将所有项目视图设置为其中最长的项目。每个API调用的项都不同。它可以是113dp或52dp,或者我不知道。宽度应灵活,同时,所有项目必须具有相同的宽度@你试过了吗?我不会工作。当父视图包装子视图并且子视图想要匹配父视图时…我已经尝试过了。你能发布你的XML代码吗?谢谢。父视图是
RecyclerView
,子视图是项目的自定义布局(例如single_item.xml
),您可以在答案中共享代码吗?如果父对象包装子对象且子对象与父对象匹配,则它将等效于唯一子对象包装子对象。当项目具有固定值(如XXdp或wrap_内容)时,包装将起作用。
private fun resizeView(view: View, newWidth: Int, newHeight: Int) {
Log.d("size", "$newWidth, $newHeight")
val params = view.layoutParams
params.width = newWidth
params.height = newHeight
view.layoutParams = params
}
var maxLength = 0
var maxWidth = 0
var maxHeight = 0
var longestP = 0
fun setData(data: ArrayList<AnswerData>?) {
...
maxLength = 0
maxWidth = 0
maxHeight = 0
longestP = 0
...
}
for( i in 0 until items.size){
val length = items[i].label!!.length
if( length > maxLength){
maxLength = length
longestP = i
}
}
if(longestP == position){
maxWidth = holder.tv!!.width
maxHeight = holder.tv!!.height
items[position].width = maxWidth
items[position].height = maxHeight
}else if(holder.tv!!.width < maxWidth){
items[position].width = maxWidth
items[position].height = maxHeight
resizeView(holder.tv!!, items[position].width, items[position].height)
}