Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中设置包裹内容的最大高度?_Java_Android_Xml_Height - Fatal编程技术网

Java 如何在android中设置包裹内容的最大高度?

Java 如何在android中设置包裹内容的最大高度?,java,android,xml,height,Java,Android,Xml,Height,在android中,如何创建一个具有最大高度的滚动视图,并包装内容,基本上是垂直包装内容,但具有最大高度 我试过了 <ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxHeight="200dp" android:layout_ali

在android中,如何创建一个具有最大高度的滚动视图,并包装内容,基本上是垂直包装内容,但具有最大高度

我试过了

<ScrollView 
     android:id="@+id/scrollView1"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
         android:maxHeight="200dp"
     android:layout_alignParentBottom="true" >

    <LinearLayout
        android:id="@+id/maincontainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

    </LinearLayout>
</ScrollView>


但这不起作用?

在这里,您可以像这样设置滚动视图的高度-:

<ScrollView 
 android:id="@+id/scrollView1"
 android:layout_width="match_parent"
 android:layout_height="200dp"
 android:layout_alignParentBottom="true" >

           <LinearLayout
            android:id="@+id/maincontainer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

           </LinearLayout>
</ScrollView>

我扩展了ScrollView并添加了实现此功能的代码:


我希望这会有用。

您可以通过编程来完成

 private static class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {
    private final static int maxHeight = 130;
    private View view;

    public OnViewGlobalLayoutListener(View view) {
        this.view = view;
    }

    @Override
    public void onGlobalLayout() {
        if (view.getHeight() > maxHeight)
            view.getLayoutParams().height = maxHeight;
    }
}
并将侦听器添加到视图中:

view.getViewTreeObserver()
                  .addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view));

当视图高度更改时,侦听器将调用方法OnGlobalYout()。

您可以将其添加到任何视图中(在继承自视图的类中重写onMeasure)


对于设置滚动视图高度,必须同时使用2个linerlayout inside,然后将scrool view设置为子级,然后设置中间linerlayout:height以限制滚动视图高度。

1。)创建一个类来处理将最大高度设置为用户传递的高度:

public class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {


private Context context;
private int maxHeight;
private View view;

public OnViewGlobalLayoutListener(View view, int maxHeight, Context context) {
    this.context = context;
    this.view = view;
    this.maxHeight = dpToPx(maxHeight);
}

@Override
public void onGlobalLayout() {
    if (view.getHeight() > maxHeight) {
        ViewGroup.LayoutParams params = view.getLayoutParams();
        params.height = maxHeight;
        view.setLayoutParams(params);
    }
}

public int pxToDp(int px) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    int dp = Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
    return dp;
}

public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
    int px = Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
    return px;
}
}
2.)将其连接至视图,并通过最大高度(DP):

messageBody.getViewTreeObserver()
            .addOnGlobalLayoutListener(
             new OnViewGlobalLayoutListener(messageBody, 256, context)
             );

感谢@harmashalex的启发。我修改了布局参数,因为@harma的代码无法设置布局参数。此外,dp到px的转换对于消除对它的疑惑也是必要的。

可以通过将视图包装到布局中并使用
layout\u constraintheighth\u max
属性来完成


...

在上面的示例中,父级
ConstraintLayout
高度限制为
200dp
,子级
ScrollView
高度包装内容,直到小于
200dp
。请注意,
app:layout\u constraintVertical\u bias=“0”
将子视图对齐在父视图的顶部,否则它将居中。

此实现立即生效。我唯一要添加的是/res/values/attrs.xml文件中的maxHeight参数,以便能够在xml()中正确地指定它,这当然不能回答这个问题!我认为您需要删除
OnViewGlobalLayoutListener(视图视图)
构造函数上的
void
。我喜欢这个解决方案,因为它避免了对自定义视图类的需要,因此可以应用于任何视图类型。顺便说一句,它一开始对我不起作用-在修改从
getLayoutParams
检索到的
LayoutParams
之后,我不得不修改您设置高度以使用
setLayoutParams
的方式。下面是问题的另一个解决方案:如何使用它?@c-an扩展一些视图类,重写类的onMeasure方法。
messageBody.getViewTreeObserver()
            .addOnGlobalLayoutListener(
             new OnViewGlobalLayoutListener(messageBody, 256, context)
             );