RecyclerView 设置最大高度
https://blog.51cto.com/u_14496797/5364085
方法1:使用约束布局
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/view_constraintLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rc_filter"
android:layout_width="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_height="0dp"
app:layout_constraintHeight_default="wrap"
app:layout_constraintHeight_max="350dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
关键代码就是
android:layout_height="0dp" app:layout_constraintHeight_default="wrap" app:layout_constraintHeight_max="350dp"
当然也可以使用 ConstraintSet 在代码中设置来实现以上代码相同的结果:
ConstraintSet constraintSet = new ConstraintSet(); constraintSet.clone(view_constraintLayout); constraintSet.constrainMaxHeight(R.id.rc_filter,Utils.dpToPx(mContext,350)); TransitionManager.beginDelayedTransition(view_constraintLayout); constraintSet.applyTo(view_constraintLayout);
方法2:重写 onMessure()方法
https://blog.csdn.net/baidu_40389775/article/details/107566050
class MaxRecyclerView : RecyclerView {
private var mMaxHeight = 0
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context, attrs)
}
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init(context, attrs)
}
private fun init(context: Context, attrs: AttributeSet?) {
val arr = context.obtainStyledAttributes(attrs, R.styleable.MaxRecyclerView)
mMaxHeight = arr.getLayoutDimension(R.styleable.MaxRecyclerView_maxHeight, mMaxHeight)
arr.recycle()
}
override fun onMeasure(widthSpec: Int, heightSpec: Int) {
super.onMeasure(widthSpec, heightSpec)
val height = measuredHeight
if (height > mMaxHeight) {
setMeasuredDimension(widthSpec, mMaxHeight)
}
}
}
如果测量的高度 大于 最大高度,则使用最大高度,否则默认使用测量的高度
<declare-styleable name="MaxRecyclerView">
<attr name="maxHeight" format="dimension" />
</declare-styleable>

浙公网安备 33010602011771号