相对布局中心垂直

Posted

技术标签:

【中文标题】相对布局中心垂直【英文标题】:RelativeLayout center vertical 【发布时间】:2013-05-04 16:42:25 【问题描述】:

我想做一个列表行布局。这个布局在最左边有一个 imageview,在 imageview 旁边有一个 textview,在最右边有一个 imageview。我希望它们都是中心垂直的。

<RelativeLayout
    android:layout_ android:layout_
    android:gravity="center_vertical"
    >
    <ImageView 
        android:id="@+id/icon"
        android:layout_ android:layout_
        android:layout_gravity="center_vertical" />
    <TextView 
        android:id="@+id/func_text" android:layout_toRightOf="@id/icon"
        android:layout_ android:layout_
        android:layout_gravity="center_vertical" />
    <ImageView 
        android:layout_ android:layout_
        android:layout_alignParentRight="true"
        android:layout_gravity="center_vertical"
        android:src="@drawable/arrow" />
</RelativeLayout>

我还尝试将android:layout_centerVertical="true" 添加到textview,但结果是textview 底部与两个imageview 对齐。 我在 android 4.2 模拟器中试过这个。 有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

使用

 android:layout_centerVertical="true"

【讨论】:

这应该是正确的答案,因为RelativeLayout没有layout_gravity属性。 “线性布局中的无效参数”【参考方案2】:

我已经编辑了您的布局。立即检查此代码。

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

<ImageView
    android:id="@+id/icon"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_centerInParent="true"
    android:background="@android:drawable/ic_lock_lock" />

<TextView
    android:id="@+id/func_text"
    android:layout_
    android:layout_
    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_
    android:layout_
    android:layout_alignParentRight="true"
    android:layout_centerInParent="true"
    android:layout_gravity="center_vertical"
    android:src="@android:drawable/ic_media_next" />

</RelativeLayout>

【讨论】:

【参考方案3】:

如果 View 的高度/宽度 = wrap_content

使用:

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

如果 View 的高度/宽度 = match_parent

使用:

android:gravity="center_vertical|center_horizontal"

【讨论】:

【参考方案4】:

尝试将文本视图的顶部和底部与其中一个图标对齐,这将使文本视图与它们共享相同的高度,然后将 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_ android:layout_
        android:gravity="center_vertical" />

【讨论】:

【参考方案5】:

对我来说,我必须删除

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

来自RelativeLayout,所以孩子的配置可以工作:

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

【讨论】:

【参考方案6】:

这对我有用。

<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_
    android:layout_
    android:background="#096d74" > 

<ImageView 
    android:layout_
    android:layout_
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:src="@drawable/img_logo_large"
    android:contentDescription="@null" />

</RelativeLayout>

【讨论】:

【参考方案7】:

这可能是因为 textview 太高了。将 textview 的 android:layout_height 更改为 wrap_content 或使用

android:gravity="center_vertical"

【讨论】:

【参考方案8】:

同时添加 android:layout_centerInParentandroid:layout_centerVertical 为我工作以使 ImageView 垂直和水平居中:

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

【讨论】:

【参考方案9】:
       <RelativeLayout
            android:layout_
            android:layout_
            android:orientation="horizontal">

            <LinearLayout
                android:layout_
                android:layout_
                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_
                    android:layout_

                    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_
                    android:layout_
                    android:fontFamily="@font/noto_kufi_regular"
                    android:text="@RenewLicenseBasicInfoFragmentVM.tvMunicipality"
                    android:textColor="@color/sixth_text"
                    android:textSize="@dimen/main_text" />
            </LinearLayout>

            <LinearLayout
                android:layout_
                android:layout_
                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_
                    android:layout_
                    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_
                    android:layout_
                    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>

【讨论】:

【参考方案10】:
        <RelativeLayout
        android:layout_
        android:layout_
        android:layout_gravity="center_vertical"
        android:layout_marginHorizontal="5dp"
        android:layout_marginBottom="5dp"
        android:background="@drawable/default_button">

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

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

【讨论】:

如果是答案,请在您的答案中直接写下一些描述/信息。

以上是关于相对布局中心垂直的主要内容,如果未能解决你的问题,请参考以下文章

自动布局中的相对中心

相对布局中如何令一个控件的中心点位于另一个控件的右侧

安卓游戏开发之对线性布局和相对布局的初步认识

RelativeLayout相对布局

android开发中常见布局的注意点

android,线性布局1,里面嵌套线性布局2(垂直排列),想让2在1里是垂直居中的,怎么搞?