J'essaie de centrer une View
à la verticale sur 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. La EditText
est toujours en haut de l'écran. Quelqu'un peut-il expliquer ce que je fais mal ici?
NOTE: si j'ajoute center_horizontal
à l'attribut layout_gravity
, il le centre horizontalement, mais toujours pas verticalement.
UPDATE: en utilisant Android:gravity="center_vertical"
sur le parent travaillé. Je ne comprends toujours pas pourquoi Android:layout_gravity="center_vertical"
sur l'enfant n'a pas fonctionné.
Je dépiste la réponse sur les groupes Google, la voici © Romain Guy:
Eh bien, tout d’abord, RelativeLayout ignore layout_gravity. Ensuite, vous devez savoir que gravité signifie "appliquer la gravité au contenu de cette vue", tandis que layout_gravity signifie "appliquer la gravité à cette vue dans son parent." Ainsi, sur un TextView, la gravité alignera le texte dans les limites de TextView alors que layout_gravity alignera le TextView dans les limites de son parent.
La réponse simple et rapide consiste à ajouter Android:gravity="center_vertical"
à la vue parent (contenant). Pour ceux qui veulent savoir pourquoi, référez-vous à la réponse de @Bostone.
Vous pouvez centrer une vue verticalement de trois manières. Je recommande d'utiliser le ConstraintLayout maintenant.
La clé est orientation = "horizontal". Vous ne pouvez pas centrer horizontalement pour 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>
Avec 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>
Il est plus facile de vous montrer celui-ci.
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>