2014-11-22 134 views
1

我从书“Android应用程序的绝对初学者第三版”以下的教程,我坚持在API 19(4.4.2)的Android项目嵌套LinearLayout:父LinearLayout是水平的,它是应该保持两个孩子的LinearLayout这是垂直的,而最终的结果应该是这样的:Android嵌套的线性布局

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> 

什么会从这个文件会丢失?我该怎么做才能获得理想的效果?

+0

你应该使用listview来显示这些。 – 2014-11-22 18:21:17

+0

@SarthakMittal谢谢,但它不是我应该/想要使用的(我将采用与RelativeLayout不同的方法),这是书的作者在他的脑海中,因为这只是复杂应用程序的开始 - 稍后会有菜单,滑块等等,所以如果我把这个搞得一团糟,我就不能按照书中的进一步说明。看起来作者在书中发布的代码中漏掉了一些东西(他在此阶段的工作代码显然与已发布的版本不同),下载的(最终)代码是完全不同且复杂的版本。 – 2014-11-22 19:45:24

+0

好吧,所以也许设置重力1(说)在这两个线性布局将工作。 – 2014-11-22 20:17:55

回答

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> 

“Glaxy信息屏幕” 的TextView是第一中古立式的LinearLayout内。由于该文本视图由于其边距和文本长度而占用更多空间,因此留下较少空间用于第二个线性布局,导致第二个布局的文本换行。

要解决此问题,请添加一个更多的线性布局,其中的方向与垂直布局的父级方向一样,并将“Glaxy Information Screen”文本视图添加为顶级父项的直接子项。 您可能需要对边距值进行一些调整才能确定布局。

+0

谢谢,这也适用。 – 2014-11-22 20:00:16

+0

我接受这个解决方案,因为它对书中的代码做了最小可能的改变,所以我可以继续用最小的改动来从书中建立例子。如果你在乎,请添加几句话为什么这个作品与书中的版本相比 - 只是为了让你的答案更完整(我完全理解,但对于将来有人可能会发现这个问题)。谢谢。 – 2014-11-23 07:37:56

0

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

第一:

android:singleLine="true" 

此标记添加到您的所有列表视图,所以这会在你所有的TextView位置保持对称。

其次:

保持同方向垂直的单亲家庭的LinearLayout,然后与水平方向和两个TextView的里面多的LinearLayout。

+0

@Nenad Bulatovic完成这项工作? – AabidMulani 2014-11-22 19:12:49

+0

第一个解决方案没有工作(完全)这里是结果:http://i968.photobucket.com/albums/ae168/nenadbulatovic/device-2014-11-22-203646.png。对于第二种解决方案,因为这只是复杂应用程序的开始 - 之后会有菜单,滑块等,所以如果我弄得太多了,我将无法按照书中的进一步说明进行操作。看起来作者在书中发布的代码中漏掉了一些东西(他在此阶段的工作代码显然与已发布的版本不同),下载的(最终)代码是完全不同且复杂的版本。 – 2014-11-22 19:47:31

+0

至于第一个解决方案,它可以从屏幕截图中看到,它将银河的名称(第一个字段)完全移出屏幕,但其他字段的位置确定)。 http://i968.photobucket.com/albums/ae168/nenadbulatovic/device-2014-11-22-203646.png – 2014-11-22 19:50:16

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> 
+0

太棒了,这个工程。最后只有一个缺失标签 - 但是当我点击编辑您的答案时,它会正确显示所有三个关闭标签?.如果没有人发布比这更好的东西,我会接受这个解决方案。谢谢。 – 2014-11-22 19:55:04

+1

由于间距问题,最后一个''丢失了。纠正。希望你明白这个原因。 – Rajesh 2014-11-22 20:03:16

1

在第二LinearLayout,保证金参数是android:layout_marginTop="33dip

你忘了Top保证金后。

;)