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>
しかし、これは機能していませんか?
これを任意のビューに追加できます(ビューから継承されたクラスのonMeasureをオーバーライドします)
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (maxHeight > 0){
int hSize = MeasureSpec.getSize(heightMeasureSpec);
int hMode = MeasureSpec.getMode(heightMeasureSpec);
switch (hMode){
case MeasureSpec.AT_MOST:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.AT_MOST);
break;
case MeasureSpec.UNSPECIFIED:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
break;
case MeasureSpec.EXACTLY:
heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.EXACTLY);
break;
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
ScrollViewを拡張し、この機能を実装するコードを追加しました。
https://Gist.github.com/JMPergar/439aaa3249fa184c7c0c
それが役に立つことを願っています。
プログラムで実行できます。
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));
ビューの高さが変更されると、リスナーはメソッドonGlobalLayout()を呼び出します。
scrollviewの高さを設定するには、内部で2つのlinearlayoutを一緒に使用してから、scroolビューを子として設定し、scrollviewの高さを制限するために、中央のlinearlayout layout:heightを設定する必要があります。