Android布局:将一个布局粘贴到屏幕顶部,并将另一个布局放置在屏幕下方的中心位置

Android布局:将一个布局粘贴到屏幕顶部,并将另一个布局放置在屏幕下方的中心位置,android,xml,android-layout,Android,Xml,Android Layout,我正在做我的第一个安卓项目,安卓工作室的记忆游戏。gameActivity框架应该包含一些文本视图,显示在屏幕顶部的一行(用于统计)和下面的存储卡中。内存版本多种多样,因此存储卡的数量也各不相同,因此网格布局的尺寸也各不相同 我的主要布局是线性布局(垂直)。我在上面放置了另一个LinearLayout(水平),文本视图就在这里。为了显示这些卡片,我使用了一个网格布局,一旦游戏开始,它就会充满卡片。 LinearLayout(带文本视图)应始终位于屏幕顶部。GridLayout应位于下方剩余空间的

我正在做我的第一个安卓项目,安卓工作室的记忆游戏。gameActivity框架应该包含一些文本视图,显示在屏幕顶部的一行(用于统计)和下面的存储卡中。内存版本多种多样,因此存储卡的数量也各不相同,因此网格布局的尺寸也各不相同

我的主要布局是线性布局(垂直)。我在上面放置了另一个LinearLayout(水平),文本视图就在这里。为了显示这些卡片,我使用了一个网格布局,一旦游戏开始,它就会充满卡片。 LinearLayout(带文本视图)应始终位于屏幕顶部。GridLayout应位于下方剩余空间的中心

我得到的是,这两种布局要么都在中间,要么线性布局是正确的,但是网格布局要么在底部,要么在剩余空间的顶部。 我试图在这里找到一个解决方案,我想我尝试了组件的

gravity
-和
layout\u gravity
-设置的所有可能组合。我可以想象,问题是我可以在主布局中使用
wrap\u content
match\u parent
,但不能同时使用两者。我想我需要
wrap\u content
将第一个布局粘贴到顶部,并
match\u parent
使用此布局下方的整个空间

如何将第一个布局粘贴到顶部,并将GridLayout置于剩余空间的中心

图中显示了我当前的布局(见下面的代码)以及我希望它的外观。

编辑以澄清: 线性布局应粘贴在屏幕顶部,网格布局应为 以线性布局下方的剩余空间为中心。 RelativeLayout无法正常工作,因为布局可能重叠,具体取决于存储卡的数量和用户设备的尺寸。 我上传了另一个屏幕截图,可以更好地看到我想要实现的目标:

这是my.xml(删除了一些不重要的文本视图):


使用或


您可以将相对布局与线性布局一起使用。从您的问题中,我了解到您希望线性布局始终保持在顶部,而网格布局始终保持在中间。如果是这种情况,我认为下面的代码片段将对您有所帮助

<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

   </GridLayout>

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

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Texts Here"
            android:layout_gravity="center"
            android:gravity="center"/>

    </LinearLayout>

</RelativeLayout>

约束是解决我问题的方法。。。以下是最终完美运行的解决方案:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/memory_activity_4x4"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/linearLayout_4x4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_gravity="center"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="10dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textStatsPairs"
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/textStatsPairs" />

    </LinearLayout>

    <GridLayout
        android:id="@+id/gridLayout4x4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:columnCount="4"
        android:foregroundGravity="center"
        android:orientation="horizontal"
        android:rowCount="4"
        android:textAlignment="center"
        android:useDefaultMargins="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout_4x4"
        tools:context=".GameActivity" />
</androidx.constraintlayout.widget.ConstraintLayout>

谢谢您的回答。遗憾的是,这并不能解决我的问题。我想我还不够清楚。GridLayout不应在整个屏幕中居中,而应仅在LinearLayout下方的剩余空间中。我编辑了我的问题并添加了另一个截图。
<RelativeLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true">

   </GridLayout>

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

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Texts Here"
            android:layout_gravity="center"
            android:gravity="center"/>

    </LinearLayout>

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/memory_activity_4x4"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:id="@+id/linearLayout_4x4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_gravity="center"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="10dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/textStatsPairs"
            android:layout_width="65dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/textStatsPairs" />

    </LinearLayout>

    <GridLayout
        android:id="@+id/gridLayout4x4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:columnCount="4"
        android:foregroundGravity="center"
        android:orientation="horizontal"
        android:rowCount="4"
        android:textAlignment="center"
        android:useDefaultMargins="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/linearLayout_4x4"
        tools:context=".GameActivity" />
</androidx.constraintlayout.widget.ConstraintLayout>