Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 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.

Проверить это