2014-11-22 3 views
1

Я следую учебнику из книги «Приложения для Android для Absolute Beginners 3rd Edition», и я застрял с вложенным LinearLayout для проекта android в API 19 (4.4.2): Родитель LinearLayout является горизонтальным, и это предполагается провести два ребенка LinearLayout, которые являются вертикальные и конечный результат должен быть примерно так:Вложенная линейная компоновка Android

enter image description here

Но то, что я получаю:

enter image description here

Я попробовал несколько раз s, перекрестный проверенный код в книге и объяснения, но я не могу понять это правильно. Вот содержание 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

Вы должны использовать список, чтобы отобразить их. –

+0

@SarthakMittal Спасибо, но это не то, что я должен/хотел бы использовать (я бы взял другой подход с RelativeLayout), это то, что автор книги имел в виду, поскольку это всего лишь начало сложного приложения - позже будет быть меню, ползунки и т. д., поэтому, если я слишком сильно перепутаю с этим, я не смогу следовать дальнейшим инструкциям в книге. Похоже, что автор оставил что-то из кода, опубликованного в книге (его рабочий код на этом этапе явно отличался от опубликованной), а загруженный (окончательный) код - совсем другая и сложная версия. –

+0

ОК, поэтому, возможно, установка силы тяжести на 1 (скажем) в обоих этих линейных макетах будет работать. –

ответ

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 находится внутри первого Verical LinearLayout. Поскольку это текстовое представление занимает больше места из-за его поля и длины текста, следовательно, оставляя меньше места для второго linearlayout, что приводит к обертыванию текста для sencond verical layout.

Чтобы решить эту проблему, добавьте еще один линейный макет с ориентацией как горизонтальный, как родительский и вертикальный, и добавьте текстовое представление «Экранный экран» в виде прямого дочернего элемента верхнего родителя. , вам может потребоваться внести некоторую корректировку значений полей для выравнивания макетов.

+0

Спасибо, это работает. –

+0

Я принимаю это как решение, поскольку он делает наименьшее возможное изменение кода из книги, поэтому, вероятно, я смогу продолжить пример из книги с минимальными изменениями. Если вам интересно, добавьте несколько слов, почему это работает по сравнению с версией из книги - просто для того, чтобы сделать ваш ответ более полным (я понимаю это полностью, но для кого-то в будущем, кто может найти этот вопрос). Спасибо. –

0

С текущего кода у меня есть два предложения:

Первое:

android:singleLine="true" 

добавить этот тег для всех ваших представлений списка, так что это будет поддерживать симметрию во всех ваших размещения TextView.

Во-вторых:

Хранить единственным родителем LinearLayout с вертикальной ориентации, то есть несколько LinearLayout с горизонтальной ориентацией и два TextView внутри него.

+0

@ Ненад Булатович Это работало? – AabidMulani

+0

1-е решение не сработало (полностью) вот результат: http://i968.photobucket.com/albums/ae168/nenadbulatovic/device-2014-11-22-203646.png. Для второго решения, поскольку это всего лишь начало сложного приложения - позже появятся меню, слайдеры и т. Д., Поэтому, если я слишком много перепутаю с этим, я не смогу следовать дальнейшим инструкциям в книге. Похоже, что автор оставил что-то из кода, опубликованного в книге (его рабочий код на этом этапе явно отличался от опубликованной), а загруженный (окончательный) код - совсем другая и сложная версия. –

+0

Что касается 1-го решения, он полностью переместил название галактики (первое поле) полностью, но другое поле расположено в порядке), как вы можете видеть на снимке экрана. http://i968.photobucket.com/albums/ae168/nenadbulatovic/device-2014-11-22-203646.png –

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

Отлично, это работает. В конце был только один тег, но когда я нажимаю, чтобы отредактировать ответ, он правильно показывает все три закрывающих тега. Если никто не будет ничего лучше, я согласен с этим в качестве решения. Благодарю. –

+1

Отсутствие последнего '' из-за проблем с интервалом. Исправленный. Надеюсь, вы поняли причину, почему это работает. – Rajesh

1

Во втором LinearLayout параметр маржа android:layout_marginTop="33dip

Вы забыли поставить Top после края.

;)

Смежные вопросы