防止 GridLayout 列宽度像其他列一样拉伸

问题描述 投票:0回答:1

我有一个以编程方式创建的 GridLayout,它呈现特定日期内的时间段(例如约会时间)。每行最多应有 4 个均匀间隔的均匀宽度项目,并且至少 1 个项目的宽度与其他行中的项目匹配。

问题在于,一行中的单个项目似乎会拉伸以填充可用空间。我想找到一种方法来防止物品拉伸。

这就是 UI 当前 的样子(点击查看大图):

enter image description here

这就是我想要的样子:

enter image description here

正如您在第二张照片中看到的,单列与多列行中的项目宽度相同。

为了简洁起见,我删除了不相关的代码。这是单个项目视图的代码:


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?

谢谢!

android android-custom-view android-gridlayout layoutparams
1个回答
0
投票

您正在寻找的房产是

GridLayout.LayoutParams

例如:

android:layout_width="0dp"
android:layout_columnWeight="1"
© www.soinside.com 2019 - 2024. All rights reserved.