it-swarm.com.ru

Как центрировать вид внутри макета Android?

Я хочу разместить макет в центре экрана.

70
Vicky

Шаг № 1: Оберните все, что вы хотите, по центру на экране в полноэкранном режиме RelativeLayout.

Шаг № 2: Дайте этому дочернему представлению (то, которое вы хотите центрировать внутри RelativeLayout) атрибут Android:layout_centerInParent="true".

143
CommonsWare

Вы можете применить центрирование к любому представлению, включая макет, используя атрибут XML Android: layout_gravity ". Возможно, вы захотите присвоить ему значение" center ".

Вы можете найти ссылку на возможные значения для этого параметра здесь: http://developer.Android.com/reference/Android/widget/LinearLayout.LayoutParams.html#attr_Android:layout_gravity

29
Eric Mill
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/relLayout1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center">
    <ProgressBar
        Android:id="@+id/ProgressBar01"
        Android:layout_centerInParent="true"
        Android:layout_width="wrap_content"
        Android:layout_gravity="center"
        Android:layout_height="wrap_content"></ProgressBar>
    <TextView
        Android:layout_below="@id/ProgressBar01"
        Android:text="@string/please_wait_authenticating"
        Android:id="@+id/txtText"
        Android:paddingTop="30px"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"></TextView>
</RelativeLayout>
19
Pentium10

Я смог центрировать вид, используя

Android:layout_centerHorizontal="true" 

а также

Android:layout_centerVertical="true" 

титулы.

15
Krishna Singh

Если вы хотите центрировать один вид, используйте этот. В этом случае TextView должен быть самым нижним представлением в вашем XML, потому что его layout_height равен match_parent.

<TextView 
    Android:id="@+id/tv_to_be_centered"
    Android:layout_height="match_parent"
    Android:layout_width="match_parent"
    Android:gravity="center"
    Android:text="Some text"
/>
6
Maksim Dmitriev

Обновленный ответ: Схема ограничения

Похоже, что в Android сейчас наблюдается тенденция к использованию макета ограничения. Хотя достаточно просто центрировать представление с помощью RelativeLayout (как показали другие ответы), ConstraintLayout является более мощным, чем RelativeLayout, для более сложных макетов. Так что стоит научиться делать сейчас.

Чтобы центрировать вид, просто перетащите маркеры ко всем четырем сторонам родительского элемента.

enter image description here

4
Suragch

Это будет работать для этого кода иногда нужны оба свойства

Android:layout_gravity="center"
Android:layout_centerHorizontal="true"
2
N Islam

Используйте ConstraintLayout. Вот пример, который будет центрировать вид в соответствии с шириной и высотой родительского экрана:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:background="#FF00FF"
        Android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHeight_percent=".6"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent=".4"></LinearLayout>
</Android.support.constraint.ConstraintLayout>

Возможно, вам придется изменить свой Gradle, чтобы получить последнюю версию ConstraintLayout:

dependencies {
...
    implementation 'com.Android.support.constraint:constraint-layout:1.1.3'
}

enter image description here

1
live-love

Добавьте Android: layout_centerInParent = "true" к элементу, который вы хотите центрировать в RelativeLayout

1
Rasika Sugathadasa