【问题标题】:Android: TextView inside ScrollView: How to limit heightAndroid:ScrollView 内的 TextView:如何限制高度
【发布时间】:2014-11-05 14:46:39
【问题描述】:

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

使用此配置,滚动视图会增长以包裹文本视图内容。 如何实现滚动视图只占用所需的空间(对于少量文本),但同时将大小限制为 100dp(对于长文本)?

  • 如果我将 layout_height 设置为 100dp,文本较短时会浪费大量空间
  • 如果我将 layout_height 设置为 wrap_content,滚动视图会冒着填满整个屏幕的风险,但我不希望整个屏幕只包含此滚动视图。最大高度应为 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

【问题讨论】:

  • 这对我不起作用,因为我在滚动视图下方有视图。 sreedhu madhu 在给定线程上也评论了这个问题
  • 那为什么不实现自己的 ScrollView 并重写 onMeasure 方法呢?
  • 你能举个例子吗,我以前从未覆盖过onmeasure方法。
  • 检查给定线程上的 whizzle 答案。

标签: android layout textview scrollview


【解决方案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>

【讨论】:

  • 感谢您的回答,我刚刚试了一下。不幸的是,使用这种方法似乎不可能限制高度。对我来说,它就像 wrapcontent 一样工作并忽略了 textview 的高度
  • 您是否尝试过使用maxHeight 设置TextView 的高度并将其包装在我上面的ScrollView 示例中?
  • 是的,但它不会以这种方式工作。不过没关系,我现在找到了解决办法,谢谢
  • 感谢android:fillViewport="true"
  • 这个不行,它禁用了滚动功能,文本被截断了。
【解决方案2】:

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

例如:

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

【讨论】:

  • 我正在寻找一个 xml 解决方案,只是因为我想避免需要手动设置高度。相反,我希望高度在 0 到 100dp 的范围内自动调整
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2015-05-01
  • 2012-10-18
相关资源
最近更新 更多