我正在阅读“Android应用程序绝对初学者第3版”一书中的教程,我在API 19(4.4.2)中遇到了嵌套的LinearLayout for android项目:Parent LinearLayout是水平的,它应该容纳两个子LinearLayout是垂直的,最终结果应该是这样的:
但我得到的是:
我试过好几次,在书中交叉检查代码,并解释但我无法做到正确。 以下是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>
此文件可能缺少什么?我该怎么做才能获得理想的结果?
答案 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。