Как поддерживать различные размеры экрана в android

Я разрабатываю приложение в Android, и я должен поддерживать все размеры и плотность экрана. Поэтому я создал другую папку для макета: layout-small layout-large layout и layout .

Затем я создал другую папку для изображения: ldpi, mdpi и hdpi . Во всей доступной папке изображение должно быть с разным размером true? Я прошу эту причину, что у меня есть телефон с большим размером и плотностью экрана, показанное изображение будет меньше, и они не будут иметь нужный размер?

Для разных размеров экрана Ниже приведен список каталогов ресурсов в приложении, которые предоставляют различные схемы компоновки для разных размеров экрана и различных рисунков растровых изображений для экранов малых, средних, высоких и сверхвысоких частот.

 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 .

Вы можете использовать блок размера sdp вместо единицы размера dp. Блок размера sdp относится к размеру экрана, и поэтому часто предпочтительнее для ориентации нескольких размеров экрана.

Используйте его осторожно! Например, в большинстве случаев вам все равно нужно разработать другой макет для планшетов.

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

Вы можете определить размеры экрана динамически

 Display mDisplay= activity.getWindowManager().getDefaultDisplay(); int width= mDisplay.getWidth(); int Height= mDisplay.getHeight(); 

Макет можно установить с использованием ширины и высоты, полученных с помощью этого метода.

Начиная с 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

Добавление в @ud_an

Неправильная практика создания разных папок для макетов. Создайте свой макет таким образом, чтобы он отлично работал со всеми размерами экрана. Чтобы достичь этого, играйте с атрибутами макета. Вам нужно иметь только разные изображения для типов hdpi, mdpi и ldpi. Остальное будет управляться ОС Android.

Это звучит высоко, когда речь заходит о поддержке нескольких экранных размеров. Ниже приведены лучшие результаты.

 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, The Downloads are High..form, что вы должны продолжить ,

Надеюсь, вам это поможет. Многие использовали некоторые сторонние библиотеки. Возможно, это сократит вашу работу, но это не лучшая практика. Получите привычку к лучшей практике Android.

Проверь это

Вы можете создавать растровые изображения для максимального разрешения / размера вашего приложения и изменять его размер в коде (во время выполнения)

Проверьте эту статью http://nuvornapps-en.blogspot.com.es/

Здесь вы найдете все объяснения, касающиеся поддержки экрана Android http://developer.android.com/guide/topics/manifest/supports-screens-element.html