Android layout_above在API 21上不起作用

时间:2014-12-14 19:13:16

标签: android relativelayout

我有一个包含3个孩子的RelativeLayout(LinearLayout):

  • 一个在顶部。
  • 一个在底部。

  • 和最后两个观点之间的一个。

我使用的代码是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context="fr.caudoux.onlinegames.activities.GameMainFragment">

    <LinearLayout
        android:orientation="vertical"
        android:background="#ff44f0c3"
        android:layout_alignParentTop="true"
        android:id="@+id/game_main_actionbar"
        android:layout_width="match_parent"
        android:layout_height="50dp">


    </LinearLayout>

    <LinearLayout
        android:background="#F01234"
        android:orientation="vertical"
        android:id="@+id/game_main_top_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:layout_below="@id/game_main_actionbar"
        android:layout_above="@+id/game_main_chat_container">

    </LinearLayout>

    <LinearLayout
        android:background="#ff2c3ff0"
        android:layout_alignParentBottom="true"
        android:orientation="vertical"
        android:id="@id/game_main_chat_container"
        android:layout_marginBottom="70dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">

    </LinearLayout>
</RelativeLayout>

自api 21以来,attribut&#39; android:layout_above&#39;不起作用:第二个LinearLayout占据第一个下面的所有空间,第三个LinearLayout超过第二个。

在api低于21时,它起作用:第二部分仅占用第一个和第三个Linearlayout之间的空格。

有谁知道为什么它不起作用和做什么?

由于

2 个答案:

答案 0 :(得分:0)

您不能在一个视图中同时设置上方和下方。在第二个视图中使用以下,然后在最后一个视图中再次使用。

答案 1 :(得分:0)

更改排序,以便在两者之间的视图之前声明顶视图和底视图:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    tools:context="fr.caudoux.onlinegames.activities.GameMainFragment">

    <LinearLayout
        android:orientation="vertical"
        android:background="#ff44f0c3"
        android:layout_alignParentTop="true"
        android:id="@+id/game_main_actionbar"
        android:layout_width="match_parent"
        android:layout_height="50dp">


    </LinearLayout>

    <LinearLayout
        android:background="#ff2c3ff0"
        android:layout_alignParentBottom="true"
        android:orientation="vertical"
        android:id="@id/game_main_chat_container"
        android:layout_marginBottom="70dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">

    </LinearLayout>

    <LinearLayout
        android:background="#F01234"
        android:orientation="vertical"
        android:id="@+id/game_main_top_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:layout_below="@id/game_main_actionbar"
        android:layout_above="@+id/game_main_chat_container">

    </LinearLayout>
</RelativeLayout>

如上所述,同样的布局更容易做LinearLayout,专门用于堆叠元素:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical"
    tools:context="fr.caudoux.onlinegames.activities.GameMainFragment">

    <LinearLayout
        android:orientation="vertical"
        android:background="#ff44f0c3"
        android:id="@+id/game_main_actionbar"
        android:layout_width="match_parent"
        android:layout_height="50dp">


    </LinearLayout>

    <LinearLayout
        android:background="#F01234"
        android:orientation="vertical"
        android:id="@+id/game_main_top_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    </LinearLayout>

    <LinearLayout
        android:background="#ff2c3ff0"
        android:orientation="vertical"
        android:id="@id/game_main_chat_container"
        android:layout_marginBottom="70dp"
        android:layout_width="match_parent"
        android:layout_height="50dp">

    </LinearLayout>
</LinearLayout>

请注意,只有中间元素(需要填充剩余空间的元素)才有layout_weight。这可确保将所有剩余空间分配给该视图,而其他视图具有固定高度。