Android:将Horizo​​ntalGridView设置为wrap_content?

时间:2019-03-27 11:12:56

标签: android

我将HorizontalGridView的宽度设置为wrap_content。但是它并没有根据其内容进行自我调整。在下面的图像中,白条显示HorizontalGridView。我如何实现预期的行为?

 <android.support.v17.leanback.widget.HorizontalGridView
    android:id="@+id/list_view"
    android:width="wrap_content"
    android:height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:focusable="true"
    lb:horizontalMargin="@dimen/menu_inter_card_spacing" 
    android:background="#FFFFFF"/>

enter image description here

2 个答案:

答案 0 :(得分:0)

要实现这一点,我将以这种方式覆盖onMeasure方法:

override fun onMeasure(widthSpec: Int, heightSpec: Int) {
    super.onMeasure(widthSpec, heightSpec)
    val widthMode = MeasureSpec.getMode(widthSpec)
    val widthSize = MeasureSpec.getSize(widthSpec)

    if(widthMode == AT_MOST) {
        var widthOnAdapterItems = 0
        adapter?.let {
            for (i in 0 until it.itemCount) {
                val viewType = it.getItemViewType(i)
                val viewHolder = it.createViewHolder(this,viewType)
                viewHolder.itemView.measure(widthSpec, heightSpec)
                widthOnAdapterItems += viewHolder.itemView.measuredWidth
            }
        }
        setMeasuredDimension(min(widthOnAdapterItems, widthSize), measuredHeight)
    }
}

这不是最佳方法,但可以。 ;)

答案 1 :(得分:-1)

可以使用setRowHeight方法来实现:

gridView.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT)

在我的情况下,我扩展了 Horizo​​ntalGridView 并在构造函数中调用此方法以使 WRAP_CONTENT 默认行为