视图有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实现。)
这些解决方案都没有为我所需要的是一个ScrollView设置为wrap_content,但有一个maxHeight,因此它将在某一点后停止展开并开始滚动。我只是简单地覆盖了ScrollView中的onMeasure方法。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(300, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
这可能不是在所有情况下都有效,但它确实为我的布局提供了所需的结果。它也提到了madhu的评论。
如果在滚动视图下面出现一些布局,那么这个技巧将不起作用- madhu Mar 5 at 4:36
如果可以的话,我会对whizzle的回答进行评论,但我认为为了让我在Android N的多窗口模式下解决这个问题,我需要稍微更改代码如下:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if(MeasureSpec.getSize(heightMeasureSpec) > maxHeight) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
这允许布局调整到小于最大高度,但也防止它大于最大高度。我使用这是一个覆盖RelativeLayout的布局类,这允许我创建一个自定义对话框,使用ScrollView作为MaxHeightRelativeLayout的孩子,它不会扩展屏幕的全部高度,也会缩小到适合Android N多窗口的最小寡妇大小。