【问题标题】:How to center a ImageView vertically in its parent?如何在其父级中垂直居中 ImageView?
【发布时间】:2010-01-23 02:11:17
【问题描述】:

我的布局设计是一个带有长文本的TextView和一个ImageView在TextView的右边。我想将 ImageView 在其父级中垂直居中,所以我使用了 android:layout_centerVertical="true",但事实证明 ImageView 与其父级的底部对齐。如果我不使用 layout_centerVertical 属性,ImageView 将对齐到其父级的顶部。我怎么解决这个问题?谢谢。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:background="#000000">
    <ImageView android:id="@+id/t3" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:src="@drawable/arrow_right"
        android:layout_alignParentRight="true" android:background="#ff0000"
        android:layout_centerVertical="true" android:scaleType="centerInside" />
    <TextView android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="This a very very very very very very very very very very very very very very very very long sentence"
        android:textColor="#231ACC" android:layout_toLeftOf="@id/t3" />
</RelativeLayout>

【问题讨论】:

    标签: java android


    【解决方案1】:

    试试android:layout_gravity="center_vertical"

    【讨论】:

    • 应该是android:layout_gravity="center_vertical"
    • papaiatis 是对的,使用 "layout_gravity" 并确保不要混淆 android:gravity="center" 和 android:layout_gravity="center"
    • layout_gravity 不适用于RelativeLayout。您应该使用 keep android:layout_centerVertical="true" 并确保 android:layout_height=fill_parent
    • @erin wrap_content 有什么问题?为什么是fill_parent?
    【解决方案2】:

    将此 xml 属性添加到您希望在其父级中居中的子级:

    android:layout_centerInParent="true"
    

    这将使其垂直/水平居中。

    【讨论】:

    • @KVISH 这是真的。与 OP 的问题一样,父母必须是 RelativeLayout
    【解决方案3】:

    将RelativeLayout的android:layout_height="wrap_content"更改为android:layout_height="fill_parent"并将android:layout_centerVertical="true"添加到TextView,它会像魅力一样工作。

    【讨论】:

    • 谢谢!我正在寻找可以在 RelativeLayout 中工作的东西!
    • layout_gravity 是 LinearLayout 的属性,而不是 RelativeLayout。无需将 ImageView 包装在 RelativeLayout 中。
    【解决方案4】:

    您可以使用LinearLayout,将layout_widthlayout_height 设置为fill_parent,并将重力设置为vertical_center

    类似这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="horizontal">
    
            <EditText 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content" 
                android:id="@+id/input_field"
                android:gravity="left"
                android:layout_weight="1"
                android:text="Left Aligned"/>
                   <EditText  
                android:id="@+id/input_field"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:gravity="right"
                android:layout_weight="1"
                android:text="Right Aligned"/>
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • 您能发布您的 XML 文件吗?
    • 代码示例来自我几天前正在做的事情,我需要将一行文本输入字段水平和垂直居中。你描述的任务听起来很相似。
    • 在我的例子中,它是不同的。我希望 TextView 右侧的 ImageView 的大小与 ImageView 包含的图片的大小完全相同。所以你的例子不适用于我的情况。
    【解决方案5】:

    这会将您的图像放在其父级的垂直中心:

    android:layout_gravity="center_vertical"

    演示:

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="64dp"
        android:orientation="horizontal">
        <ImageView 
            android:layout_width="48dip"
            android:layout_height="48dip"
            android:src="@drawable/ic_launcher"
            android:contentDescription="Application icon"
            android:layout_gravity="center_vertical" />
    
    </LinearLayout>
    

    【讨论】:

      【解决方案6】:

      只需添加:

      android:layout_gravity="center_vertical|center_horizo​​ntal"

      【讨论】:

        【解决方案7】:

        我在 Android Studio 4.2.1 中构建时发现了这个问题,经过一些修补后的解决方案是:

            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
        

        这样,约束到两边会自动使小部件居中并满足约束的需要。垂直居中时也是如此,使用:

            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-05-02
          • 1970-01-01
          • 2013-07-31
          • 1970-01-01
          • 2017-01-01
          • 2021-12-19
          • 2017-08-13
          相关资源
          最近更新 更多