Android ScrollView设置显示内容的高度

时间:2013-07-16 18:00:52

标签: android xml layout scrollview xamarin

我在尝试解决布局中具有静态高度可滚动区域的问题时遇到了很多麻烦。我有三个长列表需要在同一个屏幕上显示,顺序显示所有条目是完全不切实际的,因为如果你想跳过一个类别,你需要滚动过去可能有数百个条目。

假设我有一个内部带有线性布局的滚动视图,我希望这个占据屏幕上最大250dp的高度,并且一旦填充了多于250dp空间的条目,就可以独立滚动。

我现在拥有的是:

<ScrollView
    android:minWidth="25px"
    android:minHeight="150px"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/XXXXXXX"
    android:scrollbars="vertical">

    <LinearLayout
        android:orientation="vertical"
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/XXXXXX" />
</ScrollView>

当填充时,只要滚动视图和linearlayout需要适合内容并且显示所有具有250dp / px的“窗口”(任何测量将是好的)内容可以在其中滚动。

我是Android平台的新手,所以也许答案是显而易见的,我只是不懂语言,但任何帮助都将不胜感激! 谢谢

---已解决: 将一个linearLayout放在ScrollView外面,高度为。

4 个答案:

答案 0 :(得分:16)

this回答的帮助下,我设法结束了一个非常基本的ScrollView组件,您可以在这种情况下使用它:

创建一个扩展ScrollView的自定义类并执行以下修改:

public class MaxHeightScrollView extends ScrollView {

    private int maxHeight;

    public MaxHeightScrollView(Context context) {
        super(context);
    }

    public MaxHeightScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context, attrs);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context, attrs);
    }

    private void init(Context context, AttributeSet attrs) {
        if (attrs != null) {
            TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView);
            maxHeight = styledAttrs.getDimensionPixelSize(R.styleable.MaxHeightScrollView_maxHeight, 200); //200 is a default value
            styledAttrs.recycle();
        }
    }

   @Override
   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
       super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   }
}

然后剩下的一件小事就是在你的values文件夹的attrs.xml文件中声明你的样式(如果你没有,只需在项目的values文件夹中创建一个带有此名称的xml文件& #39; s res文件夹)。在那里添加以下行:

<declare-styleable name="MaxHeightScrollView">
    <attr name="maxHeight" format="dimension" />
</declare-styleable>

使用新的ScrollView,如下所示:

<com.yourpackage.MaxHeightScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:maxHeight="300dp">
</com.yourpackage.MaxHeightScrollView>

积分转到whizzle以快速完成此操作!

答案 1 :(得分:2)

您需要的是maxHeight。但由于视图不支持它,您必须使用解决方法。

看看这个答案:

https://stackoverflow.com/a/13811461/770467

答案 2 :(得分:2)

我的简单解决方案 在xml中设置ScrollView高度:

android:layout_height="wrap_content"

如果当前测量的高度> 1,则添加此代码以将最大高度设置为200。 200

sv.measure(0, 0);
if (nsv.getMeasuredHeight() > 200) {
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                                      ViewGroup.LayoutParams.MATCH_PARENT, 200);
        sv.setLayoutParams(lp);
}
我的示例中的

ScrollViewLinearLayout,因此我使用了LinearLayout.LayoutParams

答案 3 :(得分:0)

在ScrollView周围添加固定高度的布局