28 ноября 2014 г.

LinearLayout

Разметка LinearLayout выравнивает все дочерние объекты представлений в одном направлении — вертикально или горизонтально, в зависимости от того, как определен атрибут ориентации android:orientation:

android:orientation="horizontal" или android:orientation="vertical"

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal">
 
 <Button
  android:id="@+id/button1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Button1"/>
 <Button
  android:id="@+id/button2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Button2"/>
 <Button
  android:id="@+id/button3"
  android:layout_height="wrap_content"
  android:layout_width="fill_parent"
  android:text="Button3"/>

</LinearLayout>

Обратите внимание, что у первых двух кнопок атрибуту android: layout_width присвоено значение wrap_content, а у третьей кнопки — fill_parent, т. е. последняя кнопка заполнит оставшееся свободное пространство в разметке.

В результате получится линейное горизонтальное размещение дочерних элементов.

L0004

Если изменить в корневом элементе значение атрибута android: layout_height:

android:orientation="vertical "

элементы в контейнере расположатся вертикально. Так же обратите внимание на кнопку Button3.

L0005

Разметка LinearLayout также поддерживает атрибут android:layout_weight, который назначает индивидуальный вес для дочернего элемента. Этот атрибут определяет "важность" представления и позволяет этому элементу расширяться, чтобы заполнить любое оставшееся пространство в родительском представлении. Заданный по умолчанию вес является нулевым.

Например, если есть три текстовых поля, и двум из них объявлен вес со значением 1, в то время как другому не дается никакого веса (0), третье текстовое поле без веса не будет расширяться и займет область, определяемую размером текста, отображаемого этим полем. Другие два расширятся одинаково, чтобы заполнить остаток пространства, не занятого третьим полем. Если третьему полю присвоить вес 2 (вместо 0), это поле будет объявлено как "более важное", чем два других, так что третье поле получит 50% общего пространства, в то время как первые два получат по 25% общего пространства.

Еще примерчик на тему веса:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 <Button
  android:id="@+id/button1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="B1"
  android:layout_weight="0"/>
 <Button
  android:id="@+id/button2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="B2"
  android:layout_weight="1"/>
 <Button
  android:id="@+id/button3"
  android:layout_height="wrap_content"
  android:layout_width="wrap_content"
  android:text="B3"
  android:layout_weight="2"/>
</LinearLayout>

Обратите внимание, как различные атрибуты XML определяют поведение представления. Попробуйте поэкспериментировать с различными значениями layout_weight для дочерних элементов, чтобы увидеть, как будет распределяться доступное пространство для элементов.

L0006

Элементы разметки могут быть и вложенными. Приведем примерчик

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <Button android:text="Button1" 
        android:id="@+id/button1" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"/>
        
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_height="wrap_content" 
        android:layout_width="match_parent">
        <Button 
            android:text="Button2" 
            android:id="@+id/button2" 
            android:layout_width="wrap_content" 
            android:layout_weight="1"
            android:layout_height="wrap_content"/>
        <Button android:text="Button3" 
            android:id="@+id/button3" 
            android:layout_weight="1"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"/>
    </LinearLayout>
    
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_height="wrap_content" 
        android:layout_width="match_parent">
        <Button 
            android:text="Button4" 
            android:id="@+id/button4" 
            android:layout_weight="1"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"/>
        <Button 
            android:text="Button5" 
            android:id="@+id/button5" 
            android:layout_weight="1"
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content"/>
        <Button 
            android:text="Button6" 
            android:id="@+id/button6" 
            android:layout_weight="1"
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content"/>
    </LinearLayout>
    
</LinearLayout>

И вот как это выглядит в редакторе

L0007

То есть мы видим что в горизонтальную разметку было вложено две вертикальных с дочерними элементами. Вот как это выглядит при запуске

L0008

Такое применение вложенных компоновок позволяет создавать гибкие пользовательские интерфейсы.

Комментариев нет:

Отправить комментарий