我有一个以编程方式创建的 GridLayout,它呈现特定日期内的时间段(例如约会时间)。每行最多应有 4 个均匀间隔的均匀宽度项目,并且至少 1 个项目的宽度与其他行中的项目匹配。
问题在于,一行中的单个项目似乎会拉伸以填充可用空间。我想找到一种方法来防止物品拉伸。
这就是 UI 当前 的样子(点击查看大图):
这就是我想要的样子:
正如您在第二张照片中看到的,单列与多列行中的项目宽度相同。
为了简洁起见,我删除了不相关的代码。这是单个项目视图的代码:
class AppointmentSlotView(...): AppCompatTextView(context, attrs) {
override fun onAttachedToWindow() {
super.onAttachedToWindow()
setPadding(0, 18, 0, 18)
}
init {
// ...
isClickable = true
gravity = Gravity.CENTER
setOnClickListener { ... }
background = resources.getDrawable(R.drawable.rounded_background_periwinkle_selector)
maxLines = 1
isSingleLine = true
}
}
这是创建
GridLayout
并添加各个项目的代码:
filteredSlots.forEach {
val gridLayout = GridLayout(this)
gridLayout.columnCount = 4
it.value.forEachIndexed { index, slot ->
// Create view
val view = AppointmentSlotView(this)
val layoutParams: GridLayout.LayoutParams = GridLayout.LayoutParams(
GridLayout.spec(GridLayout.UNDEFINED, 1f),
GridLayout.spec(GridLayout.UNDEFINED, 1f)).apply {
width = 0
height = LayoutParams.WRAP_CONTENT
}
layoutParams.topMargin = 16.pxToDp(this)
layoutParams.bottomMargin = 16.pxToDp(this)
// First column
if (index % 4 == 0) {
layoutParams.marginEnd = 36.pxToDp(this)
} else if ((index + 1) % 4 == 0) {
// Fourth column.
} else {
layoutParams.marginEnd = 36.pxToDp(this)
}
gridLayout.addView(view, layoutParams)
}
gridLayout.invalidate()
wrapper.addView(gridLayout)
}
如何实现第二张图的UI?
谢谢!