在预定义的图像背景中限制ScrollView / List高度

时间:2013-02-22 12:07:31

标签: android android-layout

我有一个Android应用程序的设计,它有大表图像(见下面的A,B屏幕) 这意味着我已经将A和B作为具有我需要的所有尺寸的图像(mdpi,hdpi,xhdpi): enter image description here

我的问题是在A里面我需要放一个scrollview或一个项目列表,但我不希望它们比A图像大。 我目前的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background">

    <RelativeLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        // Some elements here

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        // Some elements here

    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/A_background"/>

        <ScrollView
            android:id="@+id/scrollview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <LinearLayout
                android:id="@+id/scrollview_container"
                android:orientation="vertical"
                android:gravity="center_horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"/>
        </ScrollView>
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/B_background"/>
    </RelativeLayout>

</LinearLayout>

当我的滚动视图有很多项目时,A正在扩展,我需要A与之前的高度相同,因为图像变得模糊。

2 个答案:

答案 0 :(得分:1)

在这些情况下,我通常最终编写一个自定义视图,使用MeasureSpec.UNSPECIFIED测量一个视图(在本例中为ImageView),另一个使用MeasureSpec.EXACTLY或MeasureSpec.AT_MOST测量另一个视图(在您的情况下为ScrollView)根据你的需要)。 一些事情:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);

    // measure view 1
    View view1 = findViewById(R.id.view1);
    view1.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.UNSPECIFIED));
    int view1Height = view1.getMeasuredHeight();

    // check measured height against MeasureSpec and adapt accordingly
    int heightMsrSpec = MeasureSpec.getMode(heightMeasureSpec);
    switch (heightMsrSpec) {
    case MeasureSpec.AT_MOST: view1Height = Math.min(height, view1Height); break;
    case MeasureSpec.EXACTLY: view1Height = height; break;
    case MeasureSpec.UNSPECIFIED: break;
    }

    // measure view2
    View view2 = findViewById(R.id.view2);
    view2.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(view1Height, MeasureSpec.EXACTLY));
    int view2Height = view2.getMeasuredHeight();

    setMeasuredDimension(width, Math.min(view1Height, view2Height) + getPaddingTop() + getPaddingBottom());
}

答案 1 :(得分:0)

井A是图像的背景你确定这是正确的xml文件你不能在imageview里面添加scrollview而且它不在里面

你可以做的是创建不同的res / layout文件夹,比如

res/layout-small
res/layout-large
res/layout-xlarge
res/layout-sw600
res/layout-sw720

将您的布局文件放入其中,并给予A&amp; amp; B根据您拥有的图像。

这样它就不会拉伸,并且在每个屏幕尺寸上看起来都会更好。