0

我有一个 android 应用程序的设计,它有大表格图像(见下面的 A,B 屏幕)这意味着我已经有 A 和 B 作为我需要的所有尺寸的图像(mdpi、hdpi、xhdpi): 在此处输入图像描述

我的问题是在 AI 内部需要放置一个滚动视图或项目列表,但我不希望它们比 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 的高度与以前相同,因为图像变得模糊。

4

2 回答 2

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());
}
于 2013-02-22T12:55:26.773 回答
0

那么A是图像的背景你确定这是正确的xml文件你不能在imageview中添加滚动视图而且它也不在里面

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

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

将您的布​​局文件放入其中,并根据您为它们提供的图像为 A 和 B 提供绝对高度。

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

于 2013-02-22T12:44:54.493 回答