Android: центрирование изображения - PullRequest
44 голосов
/ 23 мая 2011

У меня линейный макет и изображение ...

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

Как динамически центрировать мое изображение так, чтобы оно отображалось в центре экрана на всех устройствах?

Ответы [ 12 ]

117 голосов
/ 23 мая 2011

В LinearLayout, используйте: android:layout_gravity="center".

В RelativeLayout, используйте: android:layout_centerInParent="true".

56 голосов
/ 24 мая 2011

Если вы используете 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>
12 голосов
/ 23 мая 2011

Технически оба ответа выше верны, но, поскольку вы устанавливаете свой ImageView на fill_parent вместо wrap_content, изображение внутри не центрируется, но само изображение является.

Дайте вашему ImageView атрибуты:

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

ScaleType действительно необходим в этом случае, только если изображение превышает размер ImageView.Вы можете также хотеть другие типы масштаба.В заключение, android:gravity - это то, что вы ищете в этом случае, но если ваш ImageView установлен на wrap_content, вы должны установить гравитацию ImageView (android:layout_gravity), чтобы она была центрирована в пределах родительского элемента.

3 голосов
/ 23 мая 2011

Просто добавьте это в свой ImageView.

android:layout_gravity="center" 
2 голосов
/ 27 декабря 2017

Прежде всего, вам нужно использовать «match_parent» и не использовать «fill_parent» в объявлении LinearLayout, вы можете проверить «официальную документацию» здесь https://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html#MATCH_PARENT Еще одно наблюдение заключается в том, что вам нужно использоватьImageView как дочерний элемент, затем использовать ImageView должен быть самозакрывающимся;это означает, что он должен заканчиваться на '/>'.Тогда позвольте мне показать вам несколько быстрых идей: 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>

Lokkingкак это

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

Asмы видели, что вы можете использовать «скрытые пробелы» или «пробелы с цветом фона», чтобы быстро решить некоторые проблемы, очевидно, это не всегда возможно

2 голосов
/ 04 июня 2017

Вот 2 способа, которыми вы можете центрировать изображение (или изображения) как вертикально, так и горизонтально в LinearLayout.

(1) Использовать атрибут android: layout_gravity = "center" в ImageView

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

Как это работает: атрибут android: layout_gravity = "center" в центрах ImageView сам (то есть изображение) по вертикали и по горизонтали относительно своего родителя(LinearLayout).

- ИЛИ -

(2) В качестве альтернативы, вы можете использовать атрибут android: gravity = "center" в LinearLayout и опустить android: layout_gravity = "center"атрибут в ImageView:

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

Как это работает: атрибут android: gravity = "center" в центрах LinearLayout его дочерние / дочерние элементы (в данном случае это изображение) вертикально и горизонтально .

1 голос
/ 30 октября 2015

Вы также можете использовать это,

android:layout_centerHorizontal="true"

Изображение будет размещено в центре экрана

1 голос
/ 09 октября 2015

Что это для меня было

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

ура!

1 голос
/ 09 апреля 2014

Это сработало для меня

<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>
1 голос
/ 11 августа 2013

Другой метод. (в относительном тестировании, но я думаю, что в Linear также будет работать)

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

Если вы используете Eclipse, вы можете выбрать графический макет, когда файл * .xml активен. Вверху вы найдете структуру и опцию Adjust Bound View. Он обрежет все размеры псевдо-рамки (синий прямоугольник) до размера вашего рисуемого файла.

См. Также параметр scaleType, чтобы сделать изображение забавным. Попробуйте в Eclipse;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...