RelativeLayout 中的 ImageView 与父级不匹配

Posted

技术标签:

【中文标题】RelativeLayout 中的 ImageView 与父级不匹配【英文标题】:ImageView within RelativeLayout is not matching parent 【发布时间】:2012-11-16 00:50:51 【问题描述】:

所以,我正在尝试将相机预览作为背景查看,并在其上添加图像视图。检查我问过的question out,以更好地了解我要完成的工作。但是,我发现不是使用 FrameLayout,而是使用 RelativeLayout 更容易(因为可以将视图放置在屏幕上我想要的位置)。问题是我无法让图像视图(在表面视图上)占据整个屏幕。无论我如何调整图像大小,它仍然显示在中心而不填满屏幕。

所以,我的问题是,如何让图像视图在表面视图上填满整个屏幕?也许,我犯了一个简单的错误,但如果是这种情况,请指出。任何帮助将不胜感激!谢谢!

这是 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:id="@+id/relative" >

<ImageView
    android:layout_
    android:layout_
    android:id="@+id/image"
    android:src="@drawable/background" >
</ImageView>

<Button
    android:id="@+id/scan"
    android:layout_
    android:layout_
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_margin="10dp"
    android:text="Scan"
    android:textSize="20dp"
    android:textStyle="bold"
    android:onClick="Scan" />

<Button
    android:id="@+id/search"
    android:layout_
    android:layout_
    android:layout_below="@+id/scan"
    android:layout_centerHorizontal="true"
    android:layout_margin="10dp"
    android:text="Search"
    android:textSize="20dp"
    android:textStyle="bold"
    android:onClick="Search" />

<Button
    android:id="@+id/importing"
    android:layout_
    android:layout_
    android:layout_below="@+id/search"
    android:layout_centerHorizontal="true"
    android:layout_margin="10dp"
    android:text="Import"
    android:textSize="20dp"
    android:textStyle="bold"
    android:onClick="Import" />

</RelativeLayout>

这是我放置视图的代码(放在前面,以便它们在表面视图中可见):

    mPreview = new CameraPreview(this, mCamera);
    relative.addView(mPreview);
    layout.bringToFront();
    scan.bringToFront();
    search.bringToFront();
    friendImport.bringToFront();

编辑: 这是我正在谈论的示例图像(我试图让白色透明图像覆盖整个屏幕):

【问题讨论】:

【参考方案1】:

您想将 android:id="@+id/image" 拉伸到整个布局中,我说得对吗? 首先在布局视图中检查 ImageView 占用了应有的整个空间。 如果是这样,那么将适当的缩放类型添加到您的 ImageView 属性列表中:

android:scaleType="fitXY"

或者作为替代方案,将图像资源应用为“背景”而不是“src”:

android:background="@drawable/background"

祝你好运。

【讨论】:

是的,没错,我希望 android:id="@+id/image" 成为整个屏幕大小。不幸的是,我已经尝试了您所说的两种方法,但没有运气。我还使用属性“fill_parent”作为高度和宽度,但是,这似乎无济于事。如果您有任何其他建议,请随时提出,我在这里迷路了【参考方案2】:

经过一段时间的试验,我似乎找到了解决问题的方法。我的图像显示类似于这张照片:

这很奇怪,因为这是 9-patch 图像的工作原理,而我没有将我的图像声明为 9-patch。但即使我调用了 match_parent(甚至是 fill_parent),它也只会填充到我发布的图像中的填充区域。

所以,经过多次反复试验,我去掉了图像上的所有边框,并去掉了所有的模糊效果。由于某种原因,该图像的文件大小要小得多。然后,我试着把它作为背景,然后……成功了!

我不太确定为什么它一开始就不起作用,但是,我有一个理论,也许是因为图像上有一个 1px 的边框,它将它保存为 9-patch PNG 而不是一个普通的PNG文件。或者可能是由于图像上的模糊效果。我不太确定,但是,我确实知道,一旦我取消了模糊效果并移除了边框,它确实有效。

我希望这对任何可能面临类似问题的人有用!

【讨论】:

以上是关于RelativeLayout 中的 ImageView 与父级不匹配的主要内容,如果未能解决你的问题,请参考以下文章

RelativeLayout 中的 ImageView 与父级不匹配

如何在RelativeLayout中的其他布局之间放置布局?

将视图附加到Android中的自定义RelativeLayout

RelativeLayout 中的 ListView 填满整个高度

如何将 TextView 移动到 relativeLayout 中的 x 和 y

RelativeLayout中的baseline