Android嵌套线性布局

Android嵌套线性布局,android,android-linearlayout,Android,Android Linearlayout,我遵循《Android绝对初学者应用程序第3版》一书中的教程,我一直坚持API 19(4.4.2)中Android项目的嵌套线性布局:父线性布局是水平的,它应该容纳两个子线性布局,它们是垂直的,最终结果应该是这样的: 但我得到的是: 我试了好几次,反复检查了书中的代码和解释,但我都做不好。 以下是activity_main.xml的内容: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

我遵循《Android绝对初学者应用程序第3版》一书中的教程,我一直坚持API 19(4.4.2)中Android项目的嵌套线性布局:父线性布局是水平的,它应该容纳两个子线性布局,它们是垂直的,最终结果应该是这样的:

但我得到的是:

我试了好几次,反复检查了书中的代码和解释,但我都做不好。 以下是activity_main.xml的内容:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="horizontal" android:background="@drawable/galaxyinfoscreen" >

    <LinearLayout android:orientation="vertical" android:layout_margin="12dip" 
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:background="#00000000">

        <TextView android:text="@string/hello_world" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:layout_marginLeft="48dip" android:textStyle="bold" />

        <TextView android:text="@string/galaxy_name" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView  android:text="@string/galaxy_solar" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView android:text="@string/galaxy_habit" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView android:text="@string/galaxy_colony" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView android:text="@string/galaxy_pop" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView android:text="@string/galaxy_fleet" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />

        <TextView android:text="@string/galaxy_ships" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content" />
    </LinearLayout>

    <LinearLayout android:orientation="vertical" android:layout_margin="33dip"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:background="#00000000" >

        <TextView android:text="@string/name_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content"  android:layout_height="wrap_content"
            android:id="@+id/name" />

        <TextView  android:text="@string/solar_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/solar" />

        <TextView android:text="@string/habit_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/habit"/>

        <TextView android:text="@string/colony_data" android:textColor="#FFFFFF" 
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/colony" />

        <TextView android:text="@string/pop_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/pop" />

        <TextView android:text="@string/fleet_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:id="@+id/fleet" />

        <TextView android:text="@string/ships_data" android:textColor="#FFFFFF"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
             android:id="@+id/ships"/>
    </LinearLayout>
</LinearLayout>


此文件可能缺少什么?我应该怎么做才能得到想要的结果?

对于您当前的代码,我有两个建议:

第一:

android:singleLine="true"
将此标记添加到所有列表视图中,以便在所有textView位置中保持对称

第二:

保持一个方向垂直的单亲线性布局,然后有多个方向水平的线性布局,其中有两个文本视图。

试试这个

<?xml version="1.0" encoding="utf-8"?>
<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="@drawable/galaxyinfoscreen"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="48dip"
        android:text="@string/hello_world"
        android:textColor="#FFFFFF"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="12dip"
            android:background="#00000000"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_name"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_solar"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_habit"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_colony"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_pop"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_fleet"
                android:textColor="#FFFFFF" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/galaxy_ships"
                android:textColor="#FFFFFF" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="12dip"
            android:background="#00000000"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/name_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/solar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/solar_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/habit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/habit_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/colony"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/colony_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/pop"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/pop_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/fleet"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/fleet_data"
                android:textColor="#FFFFFF" />

            <TextView
                android:id="@+id/ships"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/ships_data"
                android:textColor="#FFFFFF" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

“Glaxy信息屏幕”文本视图位于第一个verical LinearLayout内。由于此文本视图的边距和文本长度占用了更多空间,因此为第二个线性布局留出的空间更少,从而导致第二个真实布局的文本换行

要解决此问题,请再添加一个方向为水平的线性布局作为垂直布局的父级,并添加“Glaxy信息屏幕”文本视图作为顶部父级的直接子级。
您可能需要对边距值进行一些调整,以调整布局

第二个
LinearLayout
没有足够的宽度容纳字符串,因此被包装。如果绝对必须使用嵌套的
线性布局
,则应使用
布局_权重
,而不是使用宽度和包装内容。在下面的示例中,我还将标题从嵌套的
LinearLayout
移动到另一个垂直布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical" android:background="@drawable/galaxyinfoscreen" >

    <TextView android:text="@string/hello_world" android:textColor="#FFFFFF"
        android:layout_width="match_parent" android:layout_height="wrap_content"
        android:gravity="center" android:textStyle="bold" />
    <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"
       android:orientation="horizontal" >
       <LinearLayout android:orientation="vertical" android:layout_margin="12dip" 
           android:layout_width="0dp" android:layout_weight="3" android:layout_height="wrap_content"
           android:background="#00000000">

           <TextView android:text="@string/galaxy_name" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView  android:text="@string/galaxy_solar" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView android:text="@string/galaxy_habit" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView android:text="@string/galaxy_colony" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView android:text="@string/galaxy_pop" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView android:text="@string/galaxy_fleet" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />

           <TextView android:text="@string/galaxy_ships" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content" />
       </LinearLayout>

       <LinearLayout android:orientation="vertical" android:layout_margin="12dip"
           android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content"
           android:background="#00000000" >

           <TextView android:text="@string/name_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content"  android:layout_height="wrap_content"
               android:id="@+id/name" />

           <TextView  android:text="@string/solar_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/solar" />

           <TextView android:text="@string/habit_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/habit"/>

           <TextView android:text="@string/colony_data" android:textColor="#FFFFFF" 
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/colony" />

           <TextView android:text="@string/pop_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/pop" />

           <TextView android:text="@string/fleet_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/fleet" />

           <TextView android:text="@string/ships_data" android:textColor="#FFFFFF"
               android:layout_width="wrap_content" android:layout_height="wrap_content"
               android:id="@+id/ships"/>
       </LinearLayout>
   </LinearLayout>
</LinearLayout>

在第二个
线性布局中,margin参数是
android:layout\u marginTop=“33dip

你忘了把
放在页边空白后面


;)

您应该使用列表视图来显示这些内容。@SarthakMittal谢谢,但这不是我应该/想要使用的(我会对RelativeLayout采取不同的方法)这就是书的作者所想的,因为这只是一个复杂应用程序的开始——以后会有菜单、滑块等,所以如果我把这件事搞得太糟,我将无法遵循书中的进一步说明。看起来作者遗漏了书中发布的代码中的一些内容(他在这一阶段的工作代码明显不同于发布的版本)而下载的(最终)代码则是完全不同且复杂的版本。好的,所以在这两种线性布局中,也许将重力设置为1(比如)会起作用。@SarthakMattal好的,我会检查并让您知道。第一种解决方案不起作用(完全)结果如下:。对于第二个解决方案,因为这只是复杂应用程序的一个开始-稍后将出现菜单、滑块等,所以如果我把这件事搞砸了,我将无法按照书中的进一步说明进行操作。看起来作者遗漏了书中发布的代码中的某些内容(他在这一阶段的工作代码明显不同于发布的版本),下载的(最终)代码是完全不同且复杂的版本。至于第一个解决方案,它将galaxy(第一个字段)的名称完全移出屏幕,但其他字段的位置正常)正如你从截图中看到的。很好,这很有效。最后只有一个缺少的标签-但是当我点击编辑你的答案时,它正确地显示了所有三个结束标签?。如果没有人发布比这更好的内容,我将接受这一解决方案。谢谢。最后一个
由于间距问题而丢失。更正。希望你理解之所以这样做,是因为我接受这个解决方案,因为它对书中的代码进行了尽可能少的更改,所以我可能可以继续从书中构建示例,并进行最少的更改。如果您介意的话,请添加几句话,说明为什么与书中的版本相比,这个解决方案是有效的-只是为了让您的答案更完整(我完全理解,但对于将来可能会发现这个问题的人来说)谢谢。