Android: TextView внутри ScrollView: как ограничить высоту

Я поместил TextView внутри ScrollView в Android:

<ScrollView
        android:layout_width = "fill_parent"
        android:layout_height = "wrap_content">

    <TextView
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content" />
</ScrollView>

С этой конфигурацией scrollview растет, чтобы обернуть содержимое textview. Как я могу добиться того, что scrollview занимает столько места, сколько необходимо (для небольшого текста), но в то же время ограничивает размер до 100dp (для длинных текстов)?

  • Если я устанавливаю layout_height в 100dp, много места теряется, когда текст короткий
  • Если я устанавливаю layout_height в wrap_content, scrollview рискует заполнить весь экран, но я не хочу, чтобы весь экран отображал только этот scrollview. Он должен быть максимально высоким на 100dp.

Решение, которое было найдено:

Спасибо за все ответы. Для всех людей, имеющих такую ​​же проблему, здесь принято решение: Создайте собственный ScrollView класс, который использует этот класс внутри вашего xml файла вместо ScrollView. Затем переопределите метод onMeasure():

public class ScrollMyVew extends ScrollView {
    public static final int maxHeight = 100; // 100dp
    // default constructors 

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(dpToPx(getResources(),maxHeight), MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
    private int dpToPx(Resources res, int dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,     res.getDisplayMetrics());
    }
}

Это решение взято из qaru.site/info/44903/...

Ответ 1

Попробуйте что-то вроде этого:

<ScrollView
    android:id="@+id/myScrollView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:fillViewport="true"/>
    <TextView
        android:id="@+id/myTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxHeight="your_value_here"/>
</ScrollView>

Ответ 2

Динамическое изменение размера TextView, если количество символов превышает определенную величину.

Пример:

TextView v = (TextView) findViewById(R.id.sometext);
LayoutParams lp = v.getLayoutParams();
lp.height = 50;
v.setLayoutParams(lp);