Relativelayout android in java

Relativelayout android in java

RelativeLayout представляет объект ViewGroup , который располагает дочерние элементы относительно позиции других дочерних элементов разметки или относительно области самой разметки RelativeLayout. Используя относительное позиционирование, мы можем установить элемент по правому краю или в центре или иным способом, который предоставляет данный контейнер. Для установки элемента в файле xml мы можем применять следующие атрибуты:

  • android:layout_above : располагает элемент над элементом с указанным Id
  • android:layout_below : располагает элемент под элементом с указанным Id
  • android:layout_toLeftOf : располагается слева от элемента с указанным Id
  • android:layout_toRightOf : располагается справа от элемента с указанным Id
  • android:layout_toStartOf : располагает начало текущего элемента, где начинается элемент с указанным Id
  • android:layout_toEndOf : располагает начало текущего элемента, где завершается элемент с указанным Id
  • android:layout_alignBottom : выравнивает элемент по нижней границе другого элемента с указанным Id
  • android:layout_alignLeft : выравнивает элемент по левой границе другого элемента с указанным Id
  • android:layout_alignRight : выравнивает элемент по правой границе другого элемента с указанным Id
  • android:layout_alignStart : выравнивает элемент по линии, у которой начинается другой элемент с указанным Id
  • android:layout_alignEnd : выравнивает элемент по линии, у которой завершается другой элемент с указанным Id
  • android:layout_alignTop : выравнивает элемент по верхней границе другого элемента с указанным Id
  • android:layout_alignBaseline : выравнивает базовую линию элемента по базовой линии другого элемента с указанным Id
  • android:layout_alignParentBottom : если атрибут имеет значение true, то элемент прижимается к нижней границе контейнера
  • android:layout_alignParentRight : если атрибут имеет значение true, то элемент прижимается к правому краю контейнера
  • android:layout_alignParentLeft : если атрибут имеет значение true, то элемент прижимается к левому краю контейнера
  • android:layout_alignParentStart : если атрибут имеет значение true, то элемент прижимается к начальному краю контейнера (при левосторонней ориентации текста — левый край)
  • android:layout_alignParentEnd : если атрибут имеет значение true, то элемент прижимается к конечному краю контейнера (при левосторонней ориентации текста — правый край)
  • android:layout_alignParentTop : если атрибут имеет значение true, то элемент прижимается к верхней границе контейнера
  • android:layout_centerInParent : если атрибут имеет значение true, то элемент располагается по центру родительского контейнера
  • android:layout_centerHorizontal : при значении true выравнивает элемент по центру по горизонтали
  • android:layout_centerVertical : при значении true выравнивает элемент по центру по вертикали
Читайте также:  Http server test python

Например, позиционирование относительно контейнера RelativeLayout:

RelativeLayout в Android Studio

Для позиционирования относительно другого элемента, нам надо указать id этого элемента. Так, поместим на RelativeLayout текстовое поле и кнопку:

В данном случае поле EditText располагается по центру в RelativeLayout, а кнопка помещается под EditText и выравнивается по его правой границе:

Позиционирование RelativeLayout в Android

Программное создание RelativeLayout

Создадим элемент RelativeLayout программно в коде Java:

package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); RelativeLayout relativeLayout = new RelativeLayout(this); EditText editText = new EditText(this); editText.setId(EditText.generateViewId()); Button button = new Button(this); button.setText("Отправить"); // устанавливаем параметры положения для EditText RelativeLayout.LayoutParams editTextParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); // выравнивание по центру родительского контейнера editTextParams.addRule(RelativeLayout.CENTER_IN_PARENT); // добавляем в RelativeLayout relativeLayout.addView(editText, editTextParams); // устанавливаем параметры положения для Button RelativeLayout.LayoutParams buttonParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT ); // выравнивание справа и снизу от поля EditText buttonParams.addRule(RelativeLayout.BELOW, editText.getId()); buttonParams.addRule(RelativeLayout.ALIGN_RIGHT, editText.getId()); // добавляем в RelativeLayout relativeLayout.addView(button, buttonParams); setContentView(relativeLayout); >>

Чтобы задать положение элемента в контейнере, применяется класс RelativeLayout.LayoutParams . Через конструктор устанавливаются значения для для ширины и высоты. Например, у элемента EditText для ширины устанавливается значение MATCH_PARENT , а для высоты — WRAP_CONTENT .

С помощью метода addRule() мы можем добавлять дополнительные правила для позиционирования элемента. Этот метод в качестве параметра принимает числовую константу, которая представляет параметр позиционирования и которая аналогична атрибуту. Например, атрибуту android:layout_centerInParent будет соответствовать константа CENTER_IN_PARENT , а атрибуту android:layout_alignRight константа ALIGN_RIGHT .

Стоит отметить, что в целях упрощения кода для установки id у EditText вызывается метод generateViewId(); , который позволяет программно сгенерировать id для элемента управления.

Затем установленный id передается в качестве второго параметра в метод addRule при установке правил для кнопки:

buttonParams.addRule(RelativeLayout.BELOW, editText.getId());

Тем самым мы указываем относительно какого элемента надо задать расположение.

Источник

RelativeLayout

ReiativeLayout (относительная разметка) находится в разделе Layouts и позволяет дочерним компонентам определять свою позицию относительно родительского компонента или относительно соседних дочерних элементов (по идентификатору элемента). В RelativeLayout дочерние элементы расположены так, что если первый элемент расположен по центру экрана, другие элементы, выровненные относительно первого элемента, будут выровнены относительно центра экрана. При таком расположении, при объявлении разметки в XML-файле, элемент, на который будут ссылаться для позиционирования другие объекты представления, должен быть объявлен раньше, чем другие элементы, которые обращаются к нему по его идентификатору.

Читайте также:  Документ с фреймами

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

  • android:layout_alignParentBottom — выравнивание относительно нижнего края родителя
  • android:layout_alignParentLeft — выравнивание относительно левого края родителя
  • android:layout_alignParentRight — выравнивание относительно правого края родителя
  • android:layout_alignParentTop — выравнивание относительно верхнего края родителя
  • android:layout_centerInParent — выравнивание по центру родителя по вертикали и горизонтали
  • android:layout_centerHorizontal — выравнивание по центру родителя по горизонтали
  • android:layout_centerVertical — выравнивание по центру родителя по вертикали

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

Атрибуты ReiativeLayout

Компонент можно размещать не только относительно родителя, но и относительно других компонентов. Для этого все компоненты должны иметь свой идентификатор, по которому их можно будет отличать друг от друга. В этом случае вы можете задействовать другие атрибуты.

  • android:layout_above — размещается над указанным компонентом
  • android:layout_below — размещается под указанным компонентом
  • android:layout_alignLeft — выравнивается по левому краю указанного компонента
  • android:layout_alignRight — выравнивается по правому краю указанного компонента
  • android:layout_alignTop — выравнивается по верхнему краю указанного компонента
  • android:layout_alignBottom — выравнивается по нижнему краю указанного компонента
  • android:layout_toLeftOf — правый край компонента размещается слева от указанного компонента
  • android:layout_toRightOf — левый край компонент размещается справа от указанного компонента

Атрибуты ReiativeLayout

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

  • android:layout_marginTop
  • android:layout_marginBottom
  • android:layout_marginLeft
  • android:layout_marginRight

Рассмотрим простой пример. Допустим, мы хотим поместить на экран элементы EditText и Button. Кнопка должна находиться справа от текстового поля. Текстовое поле при этом должно быть выравнено слева относительно родительского элемента (компоновки) и слева относительно кнопки. В свою очередь кнопка должна быть выравнена справа относительно шаблона компоновки.

Во многих случаях грамотная относительная компоновка хорошо смотрится в альбомной и портретной ориентации.

ReiativeLayout

Программное создание относительной разметки

Если вам понадобится динамически создавать относительную разметку в коде, то делается это следующим образом:

 public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); // setContentView(R.layout.activity_main); EditText editText = new EditText(this); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); // use same id as defined when adding the button params.addRule(RelativeLayout.LEFT_OF, 1001); editText.setLayoutParams(params); editText.setHint("Введите имя кота. "); Button button = new Button(this); RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); button.setLayoutParams(params2); button.setText("Нажми нежно!"); // give the button an id that we know button.setId(1001); RelativeLayout layout = new RelativeLayout(this); layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); layout.addView(editText); layout.addView(button); setContentView(layout); >

Создавать компоновку для относительной разметки чуть сложнее, чем для линейной компоновки. Рассмотрим ещё один пример. Предположим, нам нужен такой экран

Читайте также:  Else if condition in python

ReiativeLayout

Шаг 1: В XML-файле задаем относительную компоновку.

Шаг 2: Определяем дочерние элементы. В нашем случае мы имеем семь текстовых меток разного цвета. Каждому элементу присваиваем необходимые свойства: текст, цвет, размер символов и так далее.

Шаг 3: Определяем правила относительной разметки.
Красная метка должна находиться в правом верхнем углу родительского элемента.
Оранжевая метка должна располагаться по центру по горизонтали относительно родительского элемент.
Желтая метка выравнивается по правой части родительского элемента.
Зелёная метка выравнивается по центру (по вертикали) и выводится слева от синей метки.
Синяя метка выравнивается по центру (по вертикали и горизонтали) относительно родительского элемента, т.е. точно по центру.
Метка цвета индиго выравнивается по центру (по вертикали) и выводится справа от синей метки.
Фиолетовая метка выводится в нижней части родительского элемента и занимает всю её ширину.

При разработке макета с относительной разметкой следите, чтобы элементы не налезали друг на друга (можете получить сообщение об ошибке). Старайтесь не усложнять макет и не забывайте присваивать уникальный идентификатор каждому элементу. Проверяйте макет в разных режимах ориентации.

Создаём неподвижную полоску

С помощью RelativeLayout можно создать неподвижную полоску внизу экрана, которая не будет прокручиваться вместе со списком. Для этого используется атрибут android:layout_alignParentBottom и родственные ему атрибуты для верхней части. Вот простой пример со списком.

И простой код для создания прокручиваемого списка, чтобы увидеть эффект неподвижной полоски с кнопкой.

 package ru.alexanderklimov.relativelayout; import android.app.Activity; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; public class RelativeLayoutActivity extends Activity < @Override public void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.listView1); // определяем массив типа String final String[] catnames = new String[] < "Рыжик", "Барсик", "Мурзик", "Мурка", "Васька", "Томасина", "Кристина", "Пушок", "Дымка", "Кузя", "Китти", "Масяня", "Симба" >; // используем адаптер данных ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, catnames); listView.setAdapter(adapter); > > 

Запускаем проект и любуемся своей работой:

Источник

Оцените статью