Android嵌套线性布局
我遵循《Android绝对初学者应用程序第3版》一书中的教程,我一直坚持API 19(4.4.2)中Android项目的嵌套线性布局:父线性布局是水平的,它应该容纳两个子线性布局,它们是垂直的,最终结果应该是这样的: 但我得到的是: 我试了好几次,反复检查了书中的代码和解释,但我都做不好。 以下是activity_main.xml的内容: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"
<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(第一个字段)的名称完全移出屏幕,但其他字段的位置正常)正如你从截图中看到的。很好,这很有效。最后只有一个缺少的标签-但是当我点击编辑你的答案时,它正确地显示了所有三个结束标签?。如果没有人发布比这更好的内容,我将接受这一解决方案。谢谢。最后一个
由于间距问题而丢失。更正。希望你理解之所以这样做,是因为我接受这个解决方案,因为它对书中的代码进行了尽可能少的更改,所以我可能可以继续从书中构建示例,并进行最少的更改。如果您介意的话,请添加几句话,说明为什么与书中的版本相比,这个解决方案是有效的-只是为了让您的答案更完整(我完全理解,但对于将来可能会发现这个问题的人来说)谢谢。