RelativeLayout centre vertical

88

Je veux créer une disposition de ligne de liste. Cette mise en page a une vue d'image à l'extrême gauche, une vue de texte juste à côté de l'image vue et une vue d'image à l'extrême droite. Je veux qu'ils soient tous au centre vertical.

<RelativeLayout
    android:layout_width="fill_parent" android:layout_height="100dp"
    android:gravity="center_vertical"
    >
    <ImageView 
        android:id="@+id/icon"
        android:layout_width="50dp" android:layout_height="50dp"
        android:layout_gravity="center_vertical" />
    <TextView 
        android:id="@+id/func_text" android:layout_toRightOf="@id/icon"
        android:layout_width="wrap_content" android:layout_height="100dp"
        android:layout_gravity="center_vertical" />
    <ImageView 
        android:layout_width="50dp" android:layout_height="50dp"
        android:layout_alignParentRight="true"
        android:layout_gravity="center_vertical"
        android:src="@drawable/arrow" />
</RelativeLayout>

J'ai également essayé d'ajouter android:layout_centerVertical="true"à la vue de texte, mais le résultat est que la vue de texte est alignée en bas avec les deux vues d'image. J'ai essayé cela dans l'émulateur Android 4.2. Quelqu'un pourrait m'aider à ce sujet?

user2368561
la source

Réponses:

80

J'ai modifié votre mise en page. Vérifiez ce code maintenant.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#33B5E5"
android:padding="5dp" >

<ImageView
    android:id="@+id/icon"
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:background="@android:drawable/ic_lock_lock" />

<TextView
    android:id="@+id/func_text"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:layout_gravity="center_vertical"
    android:layout_toRightOf="@+id/icon"
    android:gravity="center"
    android:padding="5dp"
    android:text="This is my test string............"
    android:textColor="#FFFFFF" />

<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_alignParentRight="true"
    android:layout_centerInParent="true"
    android:layout_gravity="center_vertical"
    android:src="@android:drawable/ic_media_next" />

</RelativeLayout>
Sujith
la source
186

utilisation

 android:layout_centerVertical="true"
stinepike
la source
31
Cela devrait être la bonne réponse, car RelativeLayout n'a pas d'attribut layout_gravity.
MightySeal
"paramètre invalide dans une mise en page linéaire"
Acauã Pitta
21

Si la hauteur / largeur de la vue = wrap_content

utilisation:

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

Si la hauteur / largeur de la vue = match_parent

utilisation:

android:gravity="center_vertical|center_horizontal"
Badr
la source
8

Essayez d'aligner le haut et le bas de la vue de texte sur l'une des icônes, cela fera que la vue de texte partagera la même hauteur qu'eux, puis réglez gravitysur center_verticalpour que le texte à l'intérieur de la vue de texte soit centré verticalement.

<TextView 
        android:id="@+id/func_text" android:layout_toRightOf="@id/icon"
        android:layout_alignTop="@id/icon" android:layout_alignBottom="@id/icon"
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:gravity="center_vertical" />
hidro
la source
8

Pour moi, j'ai dû supprimer

<item name="android:gravity">center_vertical</item>

de RelativeLayout , donc la configuration des enfants fonctionnerait:

<item name="android:layout_centerVertical">true</item>
ViliusK
la source
4

Cela fonctionne pour moi.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rell_main_bg"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#096d74" > 

<ImageView 
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:src="@drawable/img_logo_large"
    android:contentDescription="@null" />

</RelativeLayout>
Marvs
la source
1

C'est peut-être parce que la vue de texte est trop élevée. Changez Android: layout_height de la vue de texte en wrap_content ou utilisez

android:gravity="center_vertical"
Boulonner
la source
1

Ajouter les deux android:layout_centerInParentet android:layout_centerVerticaltravailler pour moi pour centrer à la ImageViewfois vertical et horizontal:

<ImageView
    ..
    android:layout_centerInParent="true"
    android:layout_centerVertical="true"
    />
Alex Jolig
la source
0
       <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentStart="true"
                android:layout_centerInParent="true"
                android:layout_gravity="center_vertical"
                android:layout_marginTop="@dimen/main_spacing_extra_big"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"

                    android:fontFamily="@font/noto_kufi_regular"
                    android:text="@string/renew_license_municipality"
                    android:textColor="@color/sixth_text"
                    android:textSize="@dimen/main_text" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/noto_kufi_regular"
                    android:text="@{RenewLicenseBasicInfoFragmentVM.tvMunicipality}"
                    android:textColor="@color/sixth_text"
                    android:textSize="@dimen/main_text" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentEnd="true"
                android:layout_centerInParent="true"
                android:layout_gravity="center_vertical"
                android:layout_marginTop="@dimen/main_spacing_extra_big"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:fontFamily="@font/noto_kufi_regular"
                    android:text="@string/renew_license_license_number"
                    android:textColor="@color/sixth_text"
                    android:textSize="@dimen/main_text" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:fontFamily="@font/noto_kufi_regular"
                    android:text="@{RenewLicenseBasicInfoFragmentVM.tvLicenseNum}"
                    android:textColor="@color/sixth_text"
                    android:textSize="@dimen/main_text" />
            </LinearLayout>`enter code here`

        </RelativeLayout>
Sreejesh K Nair
la source