Android RecyclerView中动态设置Item的宽高

方案一(推荐)

  • 对itemView设置layoutParams属性来动态调整,需要获取屏幕的宽度,减去padding和margin,然后除以每一行item数量,得到每个item的实际宽度,然后根据比例计算出高度
    • 优点:简单快速
    • 缺点:不够优雅
class PreferSubAdapter : BaseQuickAdapter<PreferItem, BaseViewHolder>(R.layout.item_recycle_prefer_sub) {
    
    

    override fun convert(holder: BaseViewHolder, item: PreferItem) {
    
    
        val ivBg = holder.getView<ImageView>(R.id.iv_bg)
        val tvTitle = holder.getView<TextView>(R.id.tv_title)
        //
        val width = (mContext.screenWidth - 56.px) / 3
        val height = width * 6 / 11
        holder.itemView.layoutParams.let {
    
     lp ->
            lp.width = width.toInt()
            lp.height = height.toInt()
            holder.itemView.layoutParams = lp
        }
        Glide.with(mContext).load(item.img_url).centerCrop().into(ivBg)
        if (item.desc.isNotEmpty()){
    
    
            val span = SpannableString(item.name + "\n" + item.desc)
            span.setSpan(StyleSpan(Typeface.NORMAL), item.name.length, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            span.setSpan(AbsoluteSizeSpan(10, true), item.name.length, span.length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
            tvTitle.text = span
        }else{
    
    
            tvTitle.text = item.name
        }
    }

}

方案二

  • 通过自定义View的setMeasuredDimension来限定好View的比例
  • 特点:优雅,但是对于不同的recyclerView的item需要重新写一个对应的自定义View

import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView

class PreferImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatImageView(context, attrs, defStyleAttr) {
    
    

    init {
    
    
        initView()
    }

    private fun initView() {
    
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
    
    
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        val width = MeasureSpec.getSize(widthMeasureSpec)
        setMeasuredDimension(width, width * 6 / 11)
    }

}

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/113701746
今日推荐