RelativeLayout center vertical

88

Chcę utworzyć układ wierszy listy. Ten układ ma widok obrazu po lewej stronie, widok tekstu po prawej stronie widoku obrazu i widok obrazu po prawej stronie. Chcę, żeby wszystkie były wyśrodkowane w pionie.

<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>

Próbowałem również dodać android:layout_centerVertical="true"do widoku tekstowego, ale wynikiem jest wyrównanie widoku tekstu do dołu z dwoma widokami obrazu. Próbowałem tego w emulatorze Androida 4.2. Czy ktoś mógłby mi w tym pomóc?

user2368561
źródło

Odpowiedzi:

81

Edytowałem twój układ. Sprawdź ten kod teraz.

<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
źródło
186

posługiwać się

 android:layout_centerVertical="true"
stinepike
źródło
31
To powinna być prawidłowa odpowiedź, ponieważ RelativeLayout nie ma atrybutu layout_gravity.
MightySeal
„Niepoprawny parametr w układzie liniowym”
Acauã Pitta,
22

Jeśli wysokość / szerokość widoku = wrap_content

posługiwać się:

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

Jeśli wysokość / szerokość widoku = match_parent

posługiwać się:

android:gravity="center_vertical|center_horizontal"
Badr
źródło
8

Spróbuj wyrównać wierzch i spód widoku tekstu do jednego z ikoną, to sprawi, widok tekstowy dzielenie tej samej wysokości co je, a następnie ustawić gravitysię center_vertical, aby tekst wewnątrz tekstu centrum widzenia w pionie.

<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
źródło
8

Dla mnie musiałem usunąć

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

z RelativeLayout , więc konfiguracja dzieci działałaby:

<item name="android:layout_centerVertical">true</item>
ViliusK
źródło
4

To działa dla mnie.

<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
źródło
1

Może to dlatego, że widok tekstu jest zbyt wysoki. Zmień android: layout_height widoku tekstu na wrap_content lub użyj

android:gravity="center_vertical"
Bolton
źródło
1

Dodając oba android:layout_centerInParenti android:layout_centerVerticalpracuj dla mnie, aby wyśrodkować ImageViewzarówno w pionie, jak iw poziomie:

<ImageView
    ..
    android:layout_centerInParent="true"
    android:layout_centerVertical="true"
    />
Alex Jolig
źródło
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
źródło