Записи с тегом «linearlayout»

показать все записи
5 лет назад

Android. Всё о LinearLayout - 3


Тяготение – атрибуты android:layout_gravity и android:gravity

Тяготение (gravity) по существу является выравниванием. Например, если нужно выровнять текст справа, то нам нужно присвоить атрибуту gravity значение right, а если снизу, то bottom и т.д. Значения можно группировать, через «побитовое или» |, например, bottom|center.

Приведу табличку с возможными значениями.

 XML значение
 JAVA константа
 Описание
top


Gravity.TOP
Тяготение вверх


bottom


Gravity.BOTTOM


Тяготение вниз
left
Gravity.LEFT
Тяготение влево
right
Gravity.RIGHT
Тяготение вправо

center


Gravity.CENTER

Тяготение по центру, как по горизонтальной, так и по вертикально оси
center_horizontal


Gravity.CENTER_HORIZONTAL
Тяготение по центру горизонтальной оси

center_vertical


Gravity.CENTER_VERTICAL

Тяготение по центру вертикальной оси
clip_horizontal
Gravity.CLIP_HORIZONTAL
Place object in the horizontal center of its container, not changing its size.
clip_vertical
Gravity.CLIP_VERTICAL
Place object in the vertical center of its container, not changing its size.
fill
Gravity.FILL
Grow the horizontal and vertical size of the object if needed so it completely fills its container.
fill_horizontal
Gravity.FILL_HORIZONTAL  Grow the horizontal size of the object if needed so it completely fills its container.
fill_vertical
Gravity.FILL_VERTICAL  Grow the vertical size of the object if needed so it completely fills its container.

Сравнение android:gravity и android:layout_gravity

В Android определены два похожих атрибута тяготения – android:gravity и android:layout_gravity.
Разница между ними состоит в следующем:

  • layout_gravity используется контейнером компоновки и выравнивает сам элемент на экране.
  • gravity используется представлением и занимается выравниванием внутри элемента

Таким образом можно задать у кнопки layout_gravity равным right, а gravity равным center и получим кнопку, расположенную по правому краю и с текстом в центре.

Android latout_gravity

<?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:gravity="center"
            android:layout_gravity="right"
            android:layout_height="50dp"
            android:layout_width="100dp"
            android:text="Button"/>
</LinearLayout>
5 лет назад

Android. Всё о LinearLayout - 2


Здравствуйте.
Это вторая статья на тему разбора контейнера компоновки LinearLayout. Первая часть здесь.

Вес - layout_weight

layout_weight очень важное свойство, которое позволяет назначить  элементу значимость размера относительно других элементов в контейнере.
Предположим, что у нас, в горизонтальном направлении есть 3 кнопки и если мы их расположим друг за другом, то они займут только отведённое для них место и это может выглядеть далеко не пропорционально, а если мы назначим каждой кнопке атрибут android:layout_weight="1", тогда все кнопки станут одинаковыми, но если мы хотим одинаковые по размеру левую и правую кнопки, а для средней лишь остаток места, тогда присвоим второй кнопке значение 0 для layout_weight.

Перейдём к примерам.
листинг 1
<?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">
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="horizontal"
                  android:background="#eee"
                  android:layout_weight="1">
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="horizontal"
                  android:background="#ccc"
                  android:layout_weight="1">
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
    </LinearLayout>
    <LinearLayout android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:orientation="vertical"
                  android:background="#aaa"
                  android:gravity="center_horizontal"
                  android:layout_weight="1">
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Вес кнопки 1"/>
    </LinearLayout>
</LinearLayout>
Результат:

пример #1 работы с android:layout_weight

Итак, разберём пример.
Для начала мы создаём 3 контейнера LinearLayout (внутри корневого). Чтобы визуально выделить их, зададим каждому свой фоновый цвет атрибутом android:background. Для того, чтобы эти контейнеры ровно распределились по нашему экрану, зададим каждому атрибуту android:layout_weight значение равное 1 (по умолчанию установлено 0).
Отлично! Далее в каждый контейнер мы добавили кнопки и также задали им значение атрибута android:layout_weight равное 1. В первый контейнер с горизонтальной ориентацией мы добавили 2 кнопки, во второй 3 кнопки и в 3-ий с вертикальной ориентацией также 3 кнопки. Как видно из скриншота, они идеально распределили свободное пространство.
5 лет назад

Android. Всё о LinearLayout - 1


Этой статьёй, я открываю цикл с полным разбором функциональности Android виджетов и макетов (layout).

Начнём с макетов, а точнее разберём и перемоем все косточки диспетчеру компоновки LinearLayout.

В 2 словах, этот диспетчер позволяет компоновать внутри себя различные элементы один за одним либо вертикально, либо горизонтально. LinearLayout может быть корневым элементом макета (layout) и быть вложенным сам в себя сколько потребуется раз. Также можно взаимодействовать с другим компонвками, например, RelativeLayout, как быть вложенным, так и быть родителем.

Начнём сразу с примеров или прямиком с места в карьер.

Я буду приводить XML код компоновки и тут же аналог кода на JAVA.

Ориентация контента

Для того, чтобы задать ориентацию, воспользуйтесь атрибутом orientationв xml коде макета или методом setOrientation в JAVA коде.

В  xml
android:orientation="horizontal"
android:orientation="vertical"
В Java
// LinearLayout - элемент созданный в xml или java коде
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
linearLayout.setOrientation(LinearLayout.VERTICAL);

Хочу обратить ваше внимание, что по умолчанию LinearLayout использует горизонтальную ориентацию.

Страницы:
1