Все визуальные элементы в Android упорядочиваются на экране с помощью контейнеров. Основные классы контейнеров:
RelativeLayout
, LinearLayout
, GridLayout
, TableLayout
, ConstraintLayout
, FrameLayout
.
Элементы внутри контейнера организуются с помощью параметров разметки. Для задания в XML файле используются атрибуты, начинающиеся с префикса layout_
, например:
layout_width
и layout_height
.
Опции для задания размеров
match_parent
Растягивает элемент до размеров контейнера (в ConstraintLayout вместо match_parent
используется 0dp
).
wrap_content
Элемент принимает минимальные размеры, достаточные для отображения содержимого.
Точные размеры
Указываются в конкретных единицах, например 96dp
.
match_parent
Значение match_parent
растягивает элемент до размеров контейнера. Например:
Copy <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello World!"
android:textSize="30sp"
android:background="#e0e0e0" />
</LinearLayout>
Особенности
match_parent
применяется ко всем встроенным контейнерам, кроме ConstraintLayout.
Для ConstraintLayout вместо match_parent
используется 0dp
.
Copy <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="0dp"
android:layout_height="0dp"
android:text="Hello World!"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
wrap_content
Значение wrap_content
задаёт размеры, достаточные для отображения содержимого элемента.
Copy <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="30sp"
android:background="#ffcdd2"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Точные размеры
Для задания точных размеров указываются значения в единицах, например, dp
:
Copy <TextView
android:layout_width="150dp"
android:layout_height="90dp"
android:text="Hello World!"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Можно также комбинировать значения, например, задать фиксированную высоту и растяжение по ширине содержимого:
Copy <TextView
android:layout_width="wrap_content"
android:layout_height="80dp"
android:text="Hello World!"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Минимальные и максимальные размеры
Для ограничения размеров используются атрибуты minWidth
, maxWidth
, minHeight
, maxHeight
.
Copy <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="200dp"
android:maxWidth="250dp"
android:minHeight="100dp"
android:maxHeight="200dp"
android:text="Hello World!"
android:textSize="30sp"
android:background="#e0e0e0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
Программная установка ширины и высоты
Для создания элементов в коде и управления их размерами используется метод setLayoutParams()
.
Пример кода
Copy package com.example.viewapp;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ConstraintLayout constraintLayout = new ConstraintLayout(this);
TextView textView = new TextView(this);
textView.setText("Hello Android");
textView.setTextSize(26);
// Установка параметров размеров
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT,
ConstraintLayout.LayoutParams.WRAP_CONTENT
);
layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID;
layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID;
textView.setLayoutParams(layoutParams);
// Добавление TextView в ConstraintLayout
constraintLayout.addView(textView);
setContentView(constraintLayout);
}
}
Параметры LayoutParams
Можно также задавать точные размеры
Copy ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT,
200
);
Last updated 4 months ago