Android嵌套线性布局

时间:2014-11-22 18:15:28

标签: android android-linearlayout

我正在阅读“Android应用程序绝对初学者第3版”一书中的教程,我在API 19(4.4.2)中遇到了嵌套的LinearLayout for android项目:Parent LinearLayout是水平的,它应该容纳两个子LinearLayout是垂直的,最终结果应该是这样的:

enter image description here

但我得到的是:

enter image description here

我试过好几次,在书中交叉检查代码,并解释但我无法做到正确。 以下是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>

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

4 个答案:

答案 0 :(得分:1)

试试这个

<?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>

&#34; Glaxy信息屏幕&#34; TextView位于第一个名为LinearLayout的内部。由于此文本视图的边距和文本长度占用更多空间,因此为第二个线性布局留下更少的空间,从而导致文本换行以进行第二次线性布局。

要解决此问题,请添加一个线性布局,其方向为水平方向,与垂直布局的父级相同,并添加&#34; Glaxy信息屏幕&#34;文本视图作为顶级父级的直接子级。 您可能需要对边距值进行一些调整以使布局变得均匀。

答案 1 :(得分:1)

第二个LinearLayout没有足够的宽度来容纳字符串并且它被包裹。如果您绝对必须使用嵌套LinearLayout,则应使用layout_weight而不是将宽度与包装内容一起使用。在下面的示例中,我还将标题从嵌套的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>

答案 2 :(得分:1)

在第二个LinearLayout中,margin参数为android:layout_marginTop="33dip

您忘了在保证金之后加Top

答案 3 :(得分:0)

根据您当前的代码,我有两个建议:

首先:

android:singleLine="true"

将此标记添加到您的所有列表视图中,这样就可以在所有textView展示位置保持对称。

其次:

将单个Parent LinearLayout保持垂直方向,然后将多个LinearLayout设置为水平方向,并在其中包含两个TextView。