9

我的一个屏幕上有一个 ScrollView。我希望右边缘有阴影。我决定最简单的方法是让 ScrollView 的子级成为 RelativeLayout,并有两个 RelativeLayout 的子级 - 一个是 LinearLayout,它将容纳屏幕的布局,第二个 View 是阴影。

像这样...

<ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:scrollbars="none" >

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical" >
                <!-- stuff -->
                </LinearLayout>

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:src="@drawable/shadow"
                    android:layout_alignParentRight="true"
                    />
            </RelativeLayout>
        </ScrollView>

不幸的是,这并不完全奏效。ImageView 强制其尺寸为图像文件的大小。它不会垂直拉伸到RelativeLayout 的高度。我也试过“match_parent”无济于事。图像是一个 9-patch。

想法?

4

4 回答 4

22

将可绘制内容应用为ImageView某种程度的来源带有一个内在要求,即您希望视图尽其所能容纳内容,而无需对内容本身进行太多修改。通常,这是您希望从ImageView.

您真正想要的是通过将可绘制内容设置为background视图获得的行为,您根本不需要ImageView。背景旨在简单地拉伸、填充等到视图的任何大小。此外,由于您正在使用,您可以通过添加一个和一些额外参数RelativeLayout来告诉视图与您正在遮蔽的视图的边界相匹配。idlayout_align

        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" >

            <LinearLayout
                android:id="@+id/content_layout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical" >
            <!-- stuff -->
            </LinearLayout>

            <View
                android:layout_width="11dp"
                android:layout_height="fill_parent"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@id/content_layout"
                android:layout_alignBottom="@id/content_layout"
                android:background="@drawable/shadow"
                />
        </RelativeLayout>
于 2012-07-16T19:35:17.690 回答
9

试试这个

<ImageView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:background="@drawable/ic_launcher"
                android:scaleType="fitXY"
                android:layout_alignParentRight="true"
                />

这是我得到的

在此处输入图像描述

和代码 id

<?xml version="1.0" encoding="utf-8"?>

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    android:scrollbars="none" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <!-- stuff -->
        </LinearLayout>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:background="@drawable/ic_launcher"
            android:scaleType="fitXY" />
    </RelativeLayout>
</ScrollView>

于 2012-07-16T19:14:50.067 回答
1

您的问题与 or 9-patch 本身无关ImageView,而是与您将所有内容都包装在ScrollView. AScrollView将自动强制其级直接子级包装其内容,无论您是否告诉它FILL_PARENTMATCH_PARENT- 顺便说一句,两者都做完全相同的事情;唯一的区别是名称,它更好地反映了标志的实际行为。

幸运的是ScrollView,它提供了一种强制它用标志填充视口的方法,这将使行为与设置FILL_PARENT为常规视图非常相似。添加属性android:fillViewportsetFillViewport()从代码中使用。

编辑:为了清楚起见,您需要在ScrollView. 另外,如果它ScrollView应该有阴影,你能不把你的 9-patch 作为背景发送给它吗?我想这确实取决于您的实际图像的外观。关于您的评论:是的,RelativeLayout 在定位和调整子项大小方面是灵活的,但任何子项仍将绑定到其父项的大小。

我确实感觉我们中的一些人可能正在朝着与您的想法不同的方向努力。用一张简单的图画肯定会有助于澄清事情。

于 2012-07-16T19:31:31.140 回答
0

您想要图像右侧的阴影,然后使用带有Horizontal Orientation的单一布局,您决定使用相对布局很好。采用

android:orientation="vertical"

在此布局中,添加这两个图像。如果您仍有疑问,请给我那两张图片或示例图片,我会给您代码

于 2012-07-16T19:11:33.000 回答