Ответ 1
В LinearLayout
используйте: android:layout_gravity="center"
.
В RelativeLayout
используйте: android:layout_centerInParent="true"
.
У меня есть линейный макет и изображение...
<?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>
Как мне динамически центрировать мое изображение так, чтобы оно отображалось в центре экрана на всех устройствах?
В LinearLayout
используйте: android:layout_gravity="center"
.
В RelativeLayout
используйте: android:layout_centerInParent="true"
.
Если вы используете 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>
Технически оба ответа выше правильны, но поскольку вы устанавливаете свой ImageView на fill_parent
вместо wrap_content
, изображение внутри не центрировано, но сам ImageView.
Дайте вашему ImageView атрибуты:
android:scaleType="centerInside"
android:gravity="center"
Значение scaleType действительно необходимо только в этом случае, если изображение превышает размер ImageView. Вам также могут понадобиться различные типы scaleTypes. В заключение, android:gravity
- это то, что вы ищете в этом случае, но если ваш ImageView установлен на wrap_content
, вы должны установить гравитацию ImageView (android:layout_gravity
), чтобы она была центрирована внутри родителя.
Просто добавьте это в свой ImageView.
android:layout_gravity="center"
Вот два способа центрирования изображения (или изображений) как по вертикали, так и по горизонтали в 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 его дочерний/дочерний (в данном случае это изображение) по вертикали и по горизонтали.
Другой метод. (in Relative test, но я думаю, что в Linear также будет работать)
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:gravity="center"
Если вы используете Eclipse, вы можете выбрать графический макет, когда *.xml файл активен. Наверху вы найдете Структуру и параметр Adjust View Bounds. Он сократит все размеры псевдокадра (синий прямоугольник) до размера вашего файла.
См. также параметр scaleType, чтобы сделать смешной ваш образ. Попробуйте в Eclipse;)
Это сработало для меня
<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>
Вы также можете использовать это,
android:layout_centerHorizontal="true"
Изображение будет помещено в центр экрана
попробуйте это.
<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>
Что это для меня было
LinearLayout
RelativeLayout
<ImageView
width...
height..
---> android:layout_centerHorizontal="true"
ура!
Прежде всего, вам нужно использовать "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>
Тогда выглядит
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>
И затем выглядит как
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, подобный этому
Другая возможность
<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>
Как мы видели, вы можете использовать "скрытые пространства" или "пробелы с цветом фона", чтобы быстро решить некоторые проблемы, очевидно, это не всегда возможно.
измените вес макета по вашему желанию....
Введите это:
<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>