Android:居中图片

时间:2011-05-23 19:21:59

标签: android android-layout

我有线性布局和图像......

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

<ImageView android:layout_width="wrap_content" android:id="@+id/imageView1"
 android:src="@drawable/icon" android:layout_height="wrap_content"
 android:scaleType="center"></ImageView>

</LinearLayout>

如何动态居中我的图像,使其显示在所有设备的屏幕中央?

13 个答案:

答案 0 :(得分:117)

LinearLayout中,使用:android:layout_gravity="center"

RelativeLayout中,使用:android:layout_centerInParent="true"

答案 1 :(得分:56)

如果您使用LinearLayout,请使用gravity属性:

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

    <ImageView android:layout_width="wrap_content"
        android:id="@+id/imageView1"
        android:src="@drawable/icon"
        android:layout_height="wrap_content"
        android:scaleType="centerInside" />
</LinearLayout>

如果您使用的是RelativeLayout,则可以按如下方式使用android:layout_centerInParent

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/icon"
        android:scaleType="centerInside"
        android:layout_centerInParent="true" />

</RelativeLayout>

答案 2 :(得分:12)

从技术上讲,上述两个答案都是正确的,但由于您将ImageView设置为fill_parent而不是wrap_content,因此其中的图像不会居中,但ImageView本身就是。

为ImageView提供属性:

android:scaleType="centerInside"
android:gravity="center"

如果图像超出ImageView的大小,则仅在这种情况下需要scaleType。您可能还需要不同的scaleTypes。总之,在这种情况下,android:gravity是您正在寻找的,但如果您的ImageView设置为wrap_content,则应将ImageView的重力(android:layout_gravity)设置为居中于父节点。

答案 3 :(得分:3)

只需将其添加到您的ImageView。

android:layout_gravity="center" 

答案 4 :(得分:2)

以下两种方法可以在LinearLayout中垂直和水平居中显示图像(或图像)。

(1)在ImageView中使用android:layout_gravity =“center”属性

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"> 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        layout_height="wrap_content"
        android:src="@drawable/icon"
        android:layout_gravity="center"/>
</LinearLayout>

这是如何工作的: ImageView中的android:layout_gravity =“center”属性本身(即图像)垂直水平相对于其父级(LinearLayout)。

- 或 -

(2)或者,您可以在LinearLayout中使用android:gravity =“center”属性,并在ImageView中省略android:layout_gravity =“center”属性:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"> 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        layout_height="wrap_content"
        android:src="@drawable/icon"
        android:layout_gravity="center"/>
</LinearLayout>

这是如何工作的:LinearLayout中的android:gravity =“center”属性其子/ (在这种情况下,它是图像)垂直水平

答案 5 :(得分:2)

首先,你需要使用'match_parent'并且不要在LinearLayout声明中使用'fill_parent',你可以查看“官方 文档“这里 https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT 另一个观察是你需要使用ImageView作为孩子,然后使用ImageView应该自动关闭;这个 意味着它应该以'/&gt;'结尾。 然后让我向您展示一些快速的想法: 1-以自然的方式

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"    
android:layout_width="match_parent"
android:layout_height="match_parent"
><ImageView 
android:layout_width="wrap_content" 
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:src="@drawable/ocean" android:scaleType="center"/> </LinearLayout>

然后看起来像 enter image description here 2-你可以快速即兴发挥

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
/><ImageView 
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:scaleType="center"/><ImageView 
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:src="@drawable/ocean"
android:scaleType="center"/>
<ImageView 
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:background="#ffffff"
android:scaleType="center"/></LinearLayout>

然后看起来像

enter image description here

3-其他想法可以以这种方式诞生,例如这一点

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"    
android:layout_width="match_parent"
android:layout_height="match_parent"
><ImageView 
android:layout_width="300dp" 
android:layout_height="80dp"
android:id="@+id/imageView1"
/><ImageView 
android:layout_width="300dp" 
android:layout_height="80dp"
android:id="@+id/imageView1"
android:src="@drawable/ocean" 
/> 
<ImageView 
android:layout_width="300dp" 
android:layout_height="80dp"
android:id="@+id/imageView1"
/> </LinearLayout>

喜欢这样

enter image description here

其他可能性

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
><ImageView 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ocean"
android:id="@+id/imageView1"
android:scaleType="center"/><ImageView 
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:background="#ffffff"
android:scaleType="center"/>
<ImageView 
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:id="@+id/imageView1"
android:background="#ffffff"
    android:src="@drawable/ocean"
android:scaleType="center"/></LinearLayout>

enter image description here

正如我们所看到的,您可以使用“隐藏空间”或“带背景颜色的空间”来快速解决一些麻烦,显然,这并非总是存在的可能性

答案 6 :(得分:1)

另一种方法。 (在相对测试中,但我认为在线性也会起作用)

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:adjustViewBounds="true"
    android:gravity="center"

如果您使用Eclipse,则可以在* .xml文件处于活动状态时选择图形布局。在顶部,您将找到结构和选项调整视图边界。它会将伪框架(蓝色矩形)的所有尺寸缩短到可绘制文件的大小。

另请参阅scaleType选项,将make搞定为您的图像。在Eclipse中尝试;)

答案 7 :(得分:1)

这对我有用

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:gravity="center"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/Logo"
            android:gravity="center"
            android:scaleType="centerInside"
            android:src="@drawable/logo" />

    </LinearLayout>

答案 8 :(得分:1)

对我来说是什么

LinearLayout
     RelativeLayout
          <ImageView
              width... 
              height..
     --->     android:layout_centerHorizontal="true"

喝彩!

答案 9 :(得分:1)

你也可以使用它,

android:layout_centerHorizontal="true"

图像将放置在屏幕中央

答案 10 :(得分:0)

试试这个。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scaleType="centerInside"
        android:src="@drawable/logo" />

</LinearLayout>    

答案 11 :(得分:0)

android:scaleType =“ centerInside” ->此行用于使图像居中,但是您需要将图像的高度和宽度保持为wrap_context

 <ImageView
            android:id ="@+id/imageView6"
            android:layout_width ="wrap_content"
            android:layout_height ="wrap_content"
            android:scaleType ="centerInside"
            android:layout_marginTop ="20dp"
            app:srcCompat ="@drawable/myimage" />

答案 12 :(得分:-1)

  

根据你的意愿改变布局重量......

输入:

 <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_weight="0.03">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:scaleType="centerInside"
        android:layout_gravity="center"
        android:src="@drawable/logo" />

</LinearLayout>