Как поддерживать различные размеры экрана в android
Я разрабатываю приложение в Android, и мне нужно поддерживать все размеры и плотность экрана. Поэтому я создал другую папку для макета: layout-small layout-large
и layout
.
Затем я создал другую папку для изображения: ldpi, mdpi
и hdpi
. Во всей доступной папке изображение должно быть с разным размером true? Я прошу эту причину, что у меня есть телефон с большим размером и плотностью экрана, показанное изображение будет меньше, и они не будут иметь нужный размер?
Ответы
Ответ 1
Для разных размеров экрана Ниже приведен список каталогов ресурсов в приложении, в котором представлены различные схемы компоновки для разных размеров экрана и различных рисунков растровых изображений для экранов с малой, средней, высокой и повышенной плотностью.
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-small/my_layout.xml // layout for small screen size
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation
res/drawable-mdpi/my_icon.png // bitmap for medium density
res/drawable-hdpi/my_icon.png // bitmap for high density
res/drawable-xhdpi/my_icon.png // bitmap for extra high density
Следующий код в манифесте поддерживает все dpis.
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
И также проверьте мой ответ SO > .
Ответ 2
Вы можете использовать sdp размер единицы измерения вместо единицы размера dp. Блок sdp относится к размеру экрана, и поэтому часто предпочтительнее использовать таргетинг на несколько размеров экрана.
Используйте его осторожно! например, в большинстве случаев вам все равно нужно разработать другой макет для планшетов.
Ответ 3
Начиная с Android 3.2 (уровень API 13), группы размеров (папки small, normal, large, xlarge) устарели в пользу новой техники для управления размерами экрана на основе доступной ширины экрана.
Существуют различные конфигурации ресурсов, которые вы можете указать на основе пространства, доступного для вашего макета:
1) Наименьшая ширина. Фундаментальный размер экрана, о чем свидетельствует кратчайший размер доступной области экрана.
Значение классификатора: sw'dp value'dp
Например. res/sw600dp/layout.xml → будет использоваться для всех размеров экрана, больших или равных 600dp. Это не учитывает ориентацию устройства.
2) Доступная ширина экрана. Указывает минимальную доступную ширину в единицах dp, в которых должны использоваться ресурсы.
Значение классификатора: w'dp value'dp
Например. res/w600dp/layout.xml → будет использоваться для всех экранов, ширина которых больше или равна 600dp.
3) Доступная высота экрана. Указывает минимальную высоту экрана в единицах dp, в которых должны использоваться ресурсы.
Значение классификатора: h'dp value'dp
Например. res/h600dp/layout.xml → будет использоваться для всех экранов, высота которых больше или равна 600dp.
Поэтому в конце ваша структура папок может выглядеть так:
res/layout/layout.xml → для телефонов (ширина меньше 600dp)
res/layout-sw600dp/layout.xml → для 7 "планшетов (600dp в ширину и больше)
res/layout-sw720dp/layout.xml → для 10 "планшетов (720dp в ширину и больше)
Для получения дополнительной информации ознакомьтесь с официальной документацией:
https://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts
Ответ 4
Android настраивается самостоятельно, вы можете поместить отдельное изображение для другой папки, если хотите использовать разные изображения для устройств с высоким разрешением и другого устройства. В противном случае просто поместите в одну выталкиваемую папку макета только для некоторых изображений, которые вы также можете сделать 9-патчем.
читайте здесь
вам нужно разрешение в манифесте для нескольких экранов
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:xlargeScreens=["true" | "false"]
android:anyDensity=["true" | "false"]
android:requiresSmallestWidthDp="integer"
android:compatibleWidthLimitDp="integer"
android:largestWidthLimitDp="integer"/>
Ответ 5
Вы можете динамически определять размеры экрана
Display mDisplay= activity.getWindowManager().getDefaultDisplay();
int width= mDisplay.getWidth();
int Height= mDisplay.getHeight();
Макет можно установить с использованием ширины и высоты, полученных с помощью этого метода.
Ответ 6
Добавление в @ud_an
Не рекомендуется создавать разные папки для макетов. Создайте свой макет таким образом, чтобы он отлично работал со всеми размерами экрана. Чтобы достичь этого, играйте с атрибутами макета.
Вам нужно иметь только разные изображения для типов hdpi, mdpi и ldpi. Остальное будет управляться ОС Android.
Ответ 7
вы можете создавать растровые изображения для максимального разрешения/размера вашего приложения и изменять его размер в коде (во время выполнения)
проверить эту статью
http://nuvornapps-en.blogspot.com.es/
Ответ 8
Звучит высоко, когда речь заходит о поддержке множества экранов. Следующие результаты лучше всего.
res/layout/layout-w120dp
res/layout/layout-w160dp
res/layout/layout-w240dp
res/layout/layout-w160dp
res/layout/layout-w320dp
res/layout/layout-w480dp
res/layout/layout-w600dp
res/layout/layout-w720dp
Четкость ширины и высоты устройства с использованием показателей отображения
Поместите/выберите, какой макет подходит для приведенной ширины устройства.
let smallestScreenWidthDp="assume some value(Which will be derived from Display metrics)"
Все нужно проверить перед установкой setContentView(). В противном случае вы столкнетесь с проблемой
Configuration config = getResources().getConfiguration();
Configuration config = getResources().getConfiguration();
if (config.smallestScreenWidthDp >= 600) {
setContentView(R.layout.layout-w600dp);
} else {
setContentView(R.layout.main_activity);
}
В верхней части, я создал так много макетов, чтобы они соответствовали нескольким экранам, все зависит от вас, вы можете или нет. Вы можете видеть обзоры магазина воспроизведения, с какого API, "Загрузки высоки". должны действовать.
Надеюсь, вам это поможет. Многие использовали некоторые сторонние библиотеки. Возможно, это сократит вашу работу, но это не лучшая практика. Получите привычку к лучшей практике Android.
Проверить это