在RelativeLayout中的Android layout_below

时间:2016-04-25 07:04:00

标签: android android-layout user-interface android-relativelayout

我遇到了一个奇怪的问题,下面是我的布局:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
>

<ImageView
    android:src="@color/colorAccent"
    android:layout_width="match_parent"
    android:layout_height="200dp"/>
<ImageView
    android:id="@+id/image"
    android:src="@mipmap/ic_launcher"
    android:layout_centerInParent="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<TextView
    android:text="text"
    android:layout_below="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
</RelativeLayout>

enter image description here

TextView未按预期低于ImageView,低于ImageView的原始位置。

如果我将layout_height的{​​{1}}设置为RelativeLayout200dp,则可以正常使用。

我如何解决这个问题?

4 个答案:

答案 0 :(得分:0)

简单的解决方案是在根布局中使用android:layout_height="match_parent"

如果您使用wrap_content进行根布局,android:layout_centerInParentandroid:layout_below将无法正常使用。

使用高度match_parent或静态。

选择1:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp">

选择2:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

选择3:

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

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text" />
</LinearLayout>

现在您可以使用哪种解决方案。

答案 1 :(得分:0)

如果您希望Relative LayoutWrap Content和第二Image view申请layout_centerInParent,则需要marginTop Text View

尝试使用以下代码。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <ImageView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:src="?attr/colorPrimary" />

    <ImageView
        android:id="@+id/imageTest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/tvText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageTest"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="80dp"
        android:text="text"
        android:textSize="22sp" />


</RelativeLayout>

这是屏幕截图。

enter image description here

答案 2 :(得分:0)

感谢大家的回答。 我终于得到了解决方案。这不是一个很好的解决方案,但它运作正常。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

<ImageView
    android:id="@+id/background"
    android:src="@color/colorAccent"
    android:layout_width="match_parent"
    android:layout_height="200dp"/>
<RelativeLayout
    android:layout_height="warp_content"
    android:layout_width="match_parent"
    android:layout_alignTop="@+id/background"
    android:layout_alignBottom="@+id/background">
    <ImageView
        android:id="@+id/image"
        android:src="@mipmap/ic_launcher"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:text="text"
        android:layout_below="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</RelativeLayout>
</RelativeLayout>

答案 3 :(得分:0)

最佳答案实际上不一定正确。您不需要为元素提供顶部边距,使其位于图像视图下方。在我的情况下,我有一个带有ImageView和ListView的RelativeLayout。我希望ImageView位于ListView之上,但ListView覆盖ImageView下方的区域。我通过将layout_alignParentTop设置为ImageView并将layout_below添加到ListView来实现它。

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:paddingBottom="@dimen/activity_vertical_margin"
        tools:context="io.menuloop.menuloopandroid.MainActivity">
    <ImageView android:layout_alignParentTop="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/yourStory" android:src="@drawable/ic_face_black_24dp" />
    <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/yourStory"
            android:layout_centerHorizontal="true" android:id="@+id/listView" />
</RelativeLayout>