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);