Chiều dọc trung tâm RelativeLayout


88

Tôi muốn tạo một bố cục hàng danh sách. Bố cục này có chế độ xem hình ảnh ở ngoài cùng bên trái, chế độ xem văn bản ngay bên chế độ xem hình ảnh và chế độ xem hình ảnh ở ngoài cùng bên phải. Tôi muốn tất cả chúng đều ở giữa theo chiều dọc.

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

Tôi cũng đã cố gắng thêm android:layout_centerVertical="true"vào chế độ xem văn bản, nhưng kết quả là chế độ xem văn bản căn chỉnh dưới cùng với hai chế độ xem hình ảnh. Tôi đã thử điều này trong trình giả lập Android 4.2. Ai có thể giúp tôi về điều này?

Câu trả lời:


81

Tôi đã chỉnh sửa bố cục của bạn. Kiểm tra mã này ngay bây giờ.

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

186

sử dụng

 android:layout_centerVertical="true"

31
Đây phải là câu trả lời chính xác, vì RelativeLayout không có thuộc tính layout_gravity.
MightySeal

"thông số không hợp lệ trong bố cục tuyến tính"
Acauã Pitta

22

Nếu chiều cao / chiều rộng của Chế độ xem = wrap_content

sử dụng:

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

Nếu chiều cao / chiều rộng của Chế độ xem = match_parent

sử dụng:

android:gravity="center_vertical|center_horizontal"

8

Hãy thử căn chỉnh trên cùng và dưới cùng của chế độ xem văn bản với một trong các biểu tượng, điều này sẽ làm cho chế độ xem văn bản có cùng chiều cao với chúng, sau đó đặt gravitythành center_verticalđể làm cho văn bản bên trong chế độ xem văn bản ở giữa theo chiều dọc.

<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

Đối với tôi, tôi phải loại bỏ

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

từ RelativeLayout , vì vậy cấu hình của trẻ em sẽ hoạt động:

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

4

Điều này đang làm việc cho tôi.

<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

Điều này có thể do chế độ xem văn bản quá cao. Thay đổi android: layout_height của textview thành wrap_content hoặc sử dụng

android:gravity="center_vertical"

1

Thêm cả hai android:layout_centerInParentandroid:layout_centerVerticallàm việc để tôi căn giữa ImageViewcả chiều dọc và chiều ngang:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.