Android:ScrollView中的TextView:如何限制高度

时间:2014-09-11 15:09:23

标签: android layout textview scrollview

我在Android中的ScrollView中放置了一个TextView:

<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-content。 如何实现scrollview只占用所需的空间(少数文本),但同时将大小限制为100dp(对于长文本)?

  • 如果我将layout_height设置为100dp,则文本很短时会浪费大量空间
  • 如果我将layout_height设置为wrap_content,则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());
    }
}

此解决方案取自https://stackoverflow.com/a/23617530/3080611

2 个答案:

答案 0 :(得分:2)

尝试这样的事情:

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

答案 1 :(得分:0)

如果字符数超过一定数量,则动态更改TextView的大小。

例如:

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