Android ScrollView设置显示内容的高度

use*_*445 11 xml layout android 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>
Run Code Online (Sandbox Code Playgroud)

当填充时,只要滚动视图和线性布局需要适合内容并显示所有内容并且显示所有内容而不是具有250dp/px的"窗口"(任何测量将是好的)并且内容可在其中滚动,则只需拉伸.

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

---求助:将一个linearLayout放在ScrollView外面的高度.

Mik*_*ike 19

这个答案的帮助下,我设法结束了一个非常基本的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);
   }
}
Run Code Online (Sandbox Code Playgroud)

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

<declare-styleable name="MaxHeightScrollView">
    <attr name="maxHeight" format="dimension" />
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)

并使用您的新ScrollView如下:

<com.yourpackage.MaxHeightScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:maxHeight="300dp">
</com.yourpackage.MaxHeightScrollView>
Run Code Online (Sandbox Code Playgroud)

积分去whizzle快速包装这件事!


And*_*son 3

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

看看这个答案:

/sf/answers/966802301/