【发布时间】: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());
}
}
【问题讨论】:
-
这对我不起作用,因为我在滚动视图下方有视图。 sreedhu madhu 在给定线程上也评论了这个问题
-
那为什么不实现自己的 ScrollView 并重写 onMeasure 方法呢?
-
你能举个例子吗,我以前从未覆盖过onmeasure方法。
-
检查给定线程上的 whizzle 答案。
标签: android layout textview scrollview