android RecyclerView设置maxHeight属性无效的解决方案

218 阅读1分钟

recyclerView本没有maxHeight属性,重写自己添加没什么好说的

public class MaxHeightRecyclerView extends RecyclerView {
    private int mHeightMax;
 
    public MaxHeightRecyclerView(Context context) {
        super(context);
    }
 
    public MaxHeightRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize(context, attrs);
    }
 
    public MaxHeightRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initialize(context, attrs);
    }
 
    private void initialize(Context context, AttributeSet attrs) {
        TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.maxHeight_RecyclerView);
        mHeightMax = arr.getLayoutDimension(R.styleable.maxHeight_RecyclerView_maxHeight, mHeightMax);
        arr.recycle();
    }
 
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mHeightMax > 0) {
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(mHeightMax, MeasureSpec.AT_MOST);
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

自定义属性

  <declare-styleable name="maxHeight_RecyclerView">
        <attr name="maxHeight" format="dimension" />
    </declare-styleable>

布局中直接使用即可