视图有minHeight,但不知何故缺少maxHeight:

我要实现的是有一些项目(视图)填充一个ScrollView。当有1..3个项目,我想直接显示他们。意思是ScrollView有1,2或3个项的高度。

当有4个或更多的项目时,我希望ScrollView停止展开(因此是maxHeight)并开始提供滚动。

然而,不幸的是,没有办法设置maxHeight。所以我可能需要通过编程方式将ScrollView的高度设置为WRAP_CONTENT当有1。当有4个或更多的项目时,设置高度为3*sizeOf(视图)。

有人能解释为什么没有maxHeight提供,当已经有一个minHeight?

(BTW:一些视图,如ImageView有一个maxHeight实现。)


当前回答

如果有人正在考虑使用LayoutParams的确切值。

setLayoutParams(new LayoutParams(Y, X );

记住要考虑到设备显示的密度,否则你可能会在不同的设备上看到非常奇怪的行为。例句:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics d = new DisplayMetrics();
display.getMetrics(d);
setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, (int)(50*d.density) ));

其他回答

没有办法设置maxHeight。但是你可以设置高度。

要做到这一点,你需要发现你的scrollView的每个项目的高度。之后,设置你的scrollView高度为numberOfItens * hightofitem。

要发现一个项目的高度,可以这样做:

View item = adapter.getView(0, null, scrollView);
item.measure(0, 0);
int heightOfItem = item.getMeasuredHeight();

要设置高度,请执行以下操作:

// if the scrollView already has a layoutParams:
scrollView.getLayoutParams().height = heightOfItem * numberOfItens;
// or
// if the layoutParams is null, then create a new one.
scrollView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, heightOfItem * numberOfItens));

我认为你可以在运行时设置高度为1项scrollView.setHeight(200px),为2项scrollView.setHeight(400px)为3或更多的scrollView.setHeight(600px)

(我知道这并没有直接回答问题,但可能有助于其他人寻找maxHeight功能)

ConstraintLayout为其子via提供了最大高度

app:layout_constraintHeight_max="300dp"
app:layout_constrainedHeight="true" 

or

app:layout_constraintWidth_max="300dp"
app:layout_constrainedWidth="true" 

这里是示例用法。

如果有人正在考虑使用LayoutParams的确切值。

setLayoutParams(new LayoutParams(Y, X );

记住要考虑到设备显示的密度,否则你可能会在不同的设备上看到非常奇怪的行为。例句:

Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics d = new DisplayMetrics();
display.getMetrics(d);
setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, (int)(50*d.density) ));

以防有人需要:

app:layout_constraintHeight_max="300dp"

它强制视图(在ConstraintLayout中)的最大高度为300dp。对于那些想要通过编程来实现这一点的人来说,它是这样的:

val totalScreenHeight = displayMetrics.heightPixels
val layoutParams: ConstraintLayout.LayoutParams = viewThatIsInsideAConstraintLayout.layoutParams as ConstraintLayout.LayoutParams
        layoutParams.matchConstraintMaxHeight = totalScreenHeight/2
viewThatIsInsideAConstraintLayout.layoutParams = layoutParams