Атрибут gravity

Атрибут gravity задає позиціонування вмісту всередині візуального елемента. Він може приймати такі значення:

  • top: елементи розташовуються у верхній частині.
  • bottom: елементи розташовуються у нижній частині.
  • left: елементи розташовуються з лівого боку.
  • right: елементи розташовуються з правого боку контейнера.
  • center_vertical: вирівнює елементи по центру вертикально.
  • center_horizontal: вирівнює елементи по центру горизонтально.
  • center: елементи розташовуються по центру.
  • fill_vertical: елемент розтягується вертикально.
  • fill_horizontal: елемент розтягується горизонтально.
  • fill: елемент заповнює весь простір контейнера.
  • clip_vertical: обрізає верхню і нижню межі елементів.
  • clip_horizontal: обрізає праву і ліву межі елементів.
  • start: елемент позиціонується на початку (у верхньому лівому куті) контейнера.
  • end: елемент позиціонується в кінці (у верхньому правому куті) контейнера.

Приклад

Розмістимо текст у нижній частині елемента TextView:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <TextView
        android:gravity="bottom"
         
        android:layout_width="0dp"
        android:layout_height="200dp"
        android:text="Hello Android!"
        android:textSize="30sp"
        android:background="#e8eaf6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

За необхідності ми можемо комбінувати значення, розділяючи їх вертикальною рискою:

<TextView
    android:gravity="bottom|right"
         
    android:layout_width="0dp"
    android:layout_height="200dp"
    android:text="Hello Android!"
    android:textSize="30sp"
    android:background="#e8eaf6"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

Програмне встановлення gravity

Щоб встановити параметр gravity програмним шляхом, потрібно викликати метод setGravity(). У якості параметра до методу передається одна з констант класу Gravity, які відповідають значенням атрибута (з тією різницею, що назви записані у верхньому регістрі).

Приклад

Розглянемо приклад програмного встановлення gravity для елемента TextView:

package com.example.viewapp;
 
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
 
import android.os.Bundle;
import android.view.Gravity;
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(30);
        textView.setBackgroundColor(0xffe8eaf6);
 
        // установка гравітації
        textView.setGravity(Gravity.CENTER);
 
        // встановлення висоти та ширини
        ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams
                (ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, 200);
        layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID;
        layoutParams.rightToRight = ConstraintLayout.LayoutParams.PARENT_ID;
        layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID;
        layoutParams.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID;
        textView.setLayoutParams(layoutParams);
 
        constraintLayout.addView(textView);
        setContentView(constraintLayout);
    }
}

Для поєднання кількох значень також можна використовувати вертикальну риску:

textView.setGravity(Gravity.BOTTOM | Gravity.CENTER);