แนวตั้งศูนย์ RelativeLayout


88

ฉันต้องการสร้างเค้าโครงแถวรายการ เลย์เอาต์นี้มีมุมมองภาพอยู่ทางซ้ายสุดมุมมองข้อความถัดจากมุมมองภาพและมุมมองภาพที่ด้านขวาสุด ฉันต้องการให้ทั้งหมดอยู่ตรงกลางแนวตั้ง

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

ฉันพยายามเพิ่มลงandroid:layout_centerVertical="true"ใน textview ด้วย แต่ผลที่ได้คือมุมมองข้อความจัดชิดด้านล่างกับมุมมองสองภาพ ฉันลองสิ่งนี้ในโปรแกรมจำลอง Android 4.2 ใครสามารถช่วยฉันเกี่ยวกับเรื่องนี้?

คำตอบ:


82

ฉันแก้ไขเค้าโครงของคุณแล้ว ตรวจสอบรหัสนี้ทันที

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

188

ใช้

 android:layout_centerVertical="true"

32
นี่ควรเป็นคำตอบที่ถูกต้องทำให้ RelativeLayout ไม่มีแอตทริบิวต์ layout_gravity
MightySeal

"พารามิเตอร์ไม่ถูกต้องในเลย์เอาต์เชิงเส้น"
Acauã Pitta

22

หาก View's height / width = wrap_content

ใช้:

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

ถ้าความสูง / ความกว้างของ View = match_parent

ใช้:

android:gravity="center_vertical|center_horizontal"

8

ลองจัดตำแหน่งด้านบนและด้านล่างของมุมมองข้อความให้เป็นหนึ่งในไอคอนนี้จะทำให้มุมมองข้อความที่ใช้ร่วมกันสูงเช่นเดียวกับพวกเขาแล้วตั้งgravityเพื่อcenter_verticalที่จะทำให้ภายในศูนย์ข้อความมุมมองข้อความในแนวตั้ง

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

8

สำหรับฉันฉันต้องลบ

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

จากRelativeLayoutดังนั้นการกำหนดค่าของเด็กจะทำงาน:

<item name="android:layout_centerVertical">true</item>

4

นี่ใช้งานได้สำหรับฉัน

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

1

อาจเป็นเพราะมุมมองข้อความสูงเกินไป เปลี่ยน android: layout_height ของ textview เป็น wrap_content หรือ use

android:gravity="center_vertical"

1

การเพิ่มทั้งสองอย่างandroid:layout_centerInParentและandroid:layout_centerVerticalทำให้ฉันอยู่ตรงกลางImageViewทั้งแนวตั้งและแนวนอน:

<ImageView
    ..
    android:layout_centerInParent="true"
    android:layout_centerVertical="true"
    />

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>

0
        <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginHorizontal="5dp"
        android:layout_marginBottom="5dp"
        android:background="@drawable/default_button">

        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignParentLeft="true"
            android:layout_centerInParent="true"
            android:layout_marginStart="15dp"
            android:src="@drawable/google" />

        <Button
            android:id="@+id/btnGmailLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@null"
            android:paddingHorizontal="15dp"
            android:text="@string/gmail_login_button_text"
            android:textAllCaps="false"
            android:textColor="@color/black" />
    </RelativeLayout>

1
หากเป็นคำตอบโปรดระบุคำอธิบาย / ข้อมูลพร้อมคำตอบของคุณ
MUFAzmi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.