it-roy-ru.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);
}
26
babay

Я расширил ScrollView и добавил код для реализации этой функции:

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

Я надеюсь, что это будет полезно.

18
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 (), когда высота представления будет изменена.

15
harmashalex

для установки высоты просмотра скролла вы должны использовать 2 linearlayout внутри вместе, а затем установить представление scrool как их потомок, а затем установить средний макет linearlineout: height для предельной высоты scrollview.

0
Rasool_sof