web-dev-qa-db-ja.com

Androidのラップコンテンツで最大高さを設定する方法は?

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>

しかし、これは機能していませんか?

24
omega

これを任意のビューに追加できます(ビューから継承されたクラスの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);
}
27
babay

ScrollViewを拡張し、この機能を実装するコードを追加しました。

https://Gist.github.com/JMPergar/439aaa3249fa184c7c0c

それが役に立つことを願っています。

19
JMPergar

プログラムで実行できます。

 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()を呼び出します。

16
harmashalex

scrollviewの高さを設定するには、内部で2つのlinearlayoutを一緒に使用してから、scroolビューを子として設定し、scrollviewの高さを制限するために、中央のlinearlayout layout:heightを設定する必要があります。

0
Rasool_sof