34 votes

Centrage vertical d'une vue dans Android

J'essaie de centrer un View verticalement à l'écran avec la disposition suivante :

<?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" >
    <EditText 
        android:text="example text"  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />
</LinearLayout>

Cependant, cela ne fonctionne pas. Le site EditText est toujours en haut de l'écran. Quelqu'un peut-il m'expliquer ce que je fais de travers ?

NOTE : si j'ajoute center_horizontal à la layout_gravity puis il le centre horizontalement, mais ne le centre toujours pas verticalement.

UPDATE : en utilisant android:gravity="center_vertical" sur le parent a fonctionné. Je ne comprends toujours pas pourquoi android:layout_gravity="center_vertical" sur l'enfant n'a pas fonctionné.

25voto

Bostone Points 14208

J'ai suivi la réponse sur les groupes Google, c'est ici Romain Guy :

Eh bien, tout d'abord RelativeLayout ignore layout_gravity. Ensuite, vous devez savoir que gravity signifie "appliquer la gravité au contenu de cette vue" alors que layout_gravity signifie "appliquer la gravité à cette vue au sein de son parent". Ainsi, sur un TextView, gravity alignera le texte dans les limites du TextView alors que layout_gravity alignera le TextView dans les limites de son parent.

1voto

Suragch Points 197

Il y a trois façons de centrer une vue verticalement. Je vous recommande d'utiliser le ConstraintLayout.

1. Disposition linéaire horizontale

La clé est orientation="horizontal". Vous ne pouvez pas centrer horizontalement pour une orientation="vertical".

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:text="example text"/>

</LinearLayout>

2. RelativeLayout

Avec un RelativeLayout, vous pouvez utiliser layout_centerVertical="true" .

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:text="example text"/>

</RelativeLayout> 

3. ConstraintLayout

Le plus simple est de vous montrer celui-ci.

enter image description here

Voici le XML. Il faudrait encore ajouter une contrainte horizontale.

<android.support.constraint.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="com.example.constraintlayout.MainActivity"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="81dp">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:text="example text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="16dp"/>

</android.support.constraint.ConstraintLayout>

0voto

didxga Points 2019

La réponse simple et rapide est d'ajouter android:gravity="center_vertical" à la vue parent (contenant). Pour ceux qui veulent savoir pourquoi, veuillez consulter la réponse de @Bostone.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X