Android:如何将图像水平居中对齐到ImageView?

61

我尝试了所有的缩放类型,但它们都使图像位于ImageView的左上角。

 <ImageView
    android:id="@+id/image"
    android:scaleType="centerInside"

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:layout_marginRight="6dip"
    android:background="#0000" 
    android:src="@drawable/icon1" />
13个回答

84
<ImageView
    android:id="@+id/img"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

49
如果父布局是RelativeLayout,请使用android:layout_centerHorizontal="true" - Nolan Amy
即使Android Studio没有显示此属性,该解决方案仍然有效。 - CoolMind

55

你的 ImageView 具有属性 wrap_content。我认为图片会居中显示在 ImageView 中,但是 ImageView 本身并不会居中显示在其父视图中。如果你的屏幕上只有一个 ImageView,请尝试使用 match_parent 而不是 wrap_content。如果你的布局中有多个视图,则需要将 ImageView 居中显示。


我在布局中有多个视图。你所说的“居中ImageView”是什么意思? - Yang
ImageView本身应该位于布局组件内部。 这个周围的布局组件可以安排子元素...如果您可以发布整个布局文件,我可以尝试给您一些更精确的提示。 - Janusz
6
杨 - 我认为你的问题在于父布局是相对布局而不是线性布局。如果是这种情况,那么请尝试使用android:layout_centerHorizontal="true"而不是layout_gravity。 - Kyle Clegg

37

您可以使用以下方法将 ImageView 本身居中:

android:layout_centerVertical="true"android:layout_centerHorizontal="true",分别用于垂直或水平方向。或者将其居中于父容器中:

android:layout_centerInParent="true"

但是,根据描述,您好像是想要将实际的图片源居中于 ImageView 中,对此我不确定。


当父视图是LinearLayout时,如何处理? - VikramV
1
明白了!我猜如果你的父布局是LinearLayout,你可以在它的子ImageView中设置一个属性 - android:layout_gravity="center"。这对我有用。谢谢。 - VikramV

14

在 LinearLayout 中对齐 ImageView 时,这种方法适用于我。

<ImageView android:id="@android:id/empty"
    android:src="@drawable/find_icon"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:scaleType="center"
    />

8

尝试这个代码:

 <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_horizontal">

            <ImageView
                android:id="@+id/imgBusiness"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/back_detail" />
</LinearLayout>

1
请提供一些文本解释。 - George Sovetov

3
单独使用“fill_parent”作为layout_width即可解决问题:
 <ImageView
    android:id="@+id/image"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="6dip"
    android:background="#0000" 
    android:src="@drawable/icon1" />

哇,那真是太棒了! - undefined

2

尝试:

android:layout_height="wrap_content"
android:scaleType="fitStart"

RelativeLayout中的图像上。

2

对于我来说,在父布局元素中使用android:gravity="center"即可解决问题。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/fullImageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/fullImageView"
        android:layout_gravity="center" />

</LinearLayout>

2

您可以使用线性布局将图像视图水平排列,方法如下:

 android:layout_gravity="center"

它将使您的图像居中于父元素,如果您只想水平居中,则可以使用以下方法:
 android:layout_gravity="center_horizontal"

1
将图片的宽度设置为match_parent,高度设置为所需高度,比如300 dp。
<ImageView
    android:id = "@+id/imgXYZ"
    android:layout_width = "match_parent"
    android:layout_height = "300dp"
    android:src="@drawable/imageXYZ"
    />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接