RecyclerView是没有maxHeight属性配置的,今天遇到一个需求就需要设置RecyclerView的最大高度,我们可以通过继承RecyclerView自定义实现此属性功能。
一、自定义RecyclerView
public class MaxHeightRecyclerView extends RecyclerView {
private int maxHeight;
public MaxHeightRecyclerView(Context context) {
super(context);
}
public MaxHeightRecyclerView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public MaxHeightRecyclerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
TypedArray arr = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightRecyclerView);
maxHeight = arr.getLayoutDimension(R.styleable.MaxHeightRecyclerView_maxHeight, maxHeight);
arr.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (maxHeight > 0) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
二、定义style在style.xml中添加如下代码
<declare-styleable name="MaxHeightRecyclerView">
<attr name="maxHeight" format="dimension" />
</declare-styleable>
三、具体使用
<MaxHeightRecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:maxHeight="250dp"/>
这样,一个可以设置最大高度的RecyclerView就可以使用了。
网友评论