- Ресурсы для разных экранов
- Ресурсы для разных экранов
- Экстернализация ресурсов (вынесение данных во внешний файл)
- Группировка ресурсов
- Стандартизированные имена папок ресурсов
- Альтернативные ресурсы
- Создание альтернативных ресурсов
- Основные квалификаторы альтернативных ресурсов
- Ориентация экрана
- Версия платформы
- Локализация
- Ресурсы по умолчанию
- Как определить dimens.xml для каждого разного размера экрана в android?
- 9 ответов
- Используйте Масштабируемый DP
- нормальный — xhdpi \ dimens.xml
- Xlarge — xhdpi \ dimens.xml
- большой — xhdpi \ dimens.xml
- Нижеприведенные экраны видны в разделе » Поиск общих телефонов и планшетов «
- большой — mdpi \ dimens.xml
- нормальный — hdpi \ dimens.xml
- малый — ldpi \ dimens.xml
- xlarge — mdpi \ dimens.xml
- нормальный — ldpi \ dimens.xml
- нормальный — hdpi \ dimens.xml
- нормальный — mdpi \ dimens.xml
- Похожие вопросы:
Ресурсы для разных экранов
Ресурсы для разных экранов
Адаптивный layout — это layout, который предназначен для работы с различными размерами и ориентациями экрана, а также с различными устройствами, на различных языках и версиях Android.
В этом уроке вы узнаете, как создать адаптивный layout путем экстернализации (вынесения в отдельные компоненты) и группировки ресурсов, предоставляя альтернативные ресурсы и ресурсы по умолчанию для вашего приложения.
Экстернализация ресурсов (вынесение данных во внешний файл)
Чтоб экстернализировать ресурсы, нужно хранить их отдельно от кода приложения. Например, вместо того, чтобы жёстко прописывать какую-то строку в коде, вам нужно дать имя строки и добавить её в файл strings.xml , который в Android Studio вы можете найти на панели Project > Android в папке res > values.
Во внешние файлы также необходимо выносить такие ресурсы, как иконки, layouts, drawables (графические объекты). Это позволит:
- Поддерживать внешние ресурсы отдельно от остальной части кода. Если необходимо изменить ресурс, который используется в коде в нескольких местах, это можно сделать единожды в одном месте.
- Предоставить альтернативные ресурсы, которые будут поддерживать определённые конфигурации устройств (например, устройства с различными языками или разными размерами экрана).
Группировка ресурсов
Сохраняйте все ресурсы в папке res. Сортируйте их по типу в отдельные папки внутри res. Для этих папок нужно использовать стандартизированные имена.
Например, на скриншоте ниже показана иерархия файлов для небольшого проекта, которую можно увидеть на панели Project > Android. Папки, которые содержат ресурсы этого проекта по умолчанию, используют стандартизированные имена: drawable, layout, menu, mipmap (для иконок) и values.
В таблице ниже перечислены основные стандартизированные имена папок ресурсов.
Стандартизированные имена папок ресурсов
Имя папки | Тип ресурса |
---|---|
color | XML-файлы, определяющие «списки состояний» цветов (эти файлы отличаются от файла colors.xml в папке values). |
drawable | Файлы растровых изображений (WebP, PNG, 9-patch, JPG, GIF) и XML-файлы, скомпилированные в графические объекты. |
mipmap | Иконки приложения для разных плотностей пикселей экрана. |
layout | XML-файлы, определяющие пользовательский интерфейс. |
menu | XML-файлы, определяющие меню приложений (например, меню параметров). |
values | XML-файлы, содержащие простые значения, такие как строки, целые числа и цвета. Для удобства разместите уникальные типы ресурсов в разных файлах. Можете использовать следующие варианты наименований файлов ресурсов в этой папке: |
- arrays.xml для массивов ресурсов,
- dimensions.xml для значений различных размеров в интерфейсах,
- strings.xml , colors.xml , styles.xml |
Альтернативные ресурсы
Большинство приложений предоставляет альтернативные ресурсы для поддержки определённых конфигураций устройств. Например, в вашем приложении должны быть альтернативные drawable-ресурсы для разных разрешений экрана и альтернативные строковые ресурсы для различных языков. Во время запуска приложения Android определит текущую конфигурацию устройства и загрузит соответствующие ресурсы.
Если для какой-либо конфигурации устройства нет доступных ресурсов, Android воспользуется ресурсами приложения по умолчанию.
Как и ресурсы по умолчанию, альтернативные ресурсы хранятся в папках внутри res. Для этих папок используется следующий шаблон названия:
- resource_name — это имя папки для этого типа ресурса (см. табл. выше) Например, drawable или values.
- config_qualifier определяет конфигурацию устройства, для которого будут использоваться ресурсы. Все возможные квалификаторы рассматриваются здесь (таблица 2).
- Чтобы добавить несколько квалификаторов к одному имени папки, разделите их с помощью тире. Если вы используете несколько квалификаторов для папки ресурса, их нужно расположить в порядке их перечисления в таблице.
Примеры с одним квалификатором:
- Строковые ресурсы, локализованные на японский язык, будут находиться в файле strings.xml внутри папки values-ja в папке res (сокращенно res/values-ja/strings.xml ). Строковые ресурсы по умолчанию (ресурсы, которые должны использоваться, когда не найдено специфичных для языка ресурсов) будут находиться в файле res/values/strings.xml . Обратите внимание, что XML-файлы имеют одинаковые имена, в данном случае — strings.xml .
- Стили компонентов для API уровня 21 и выше будут находиться в файле res/values-v21/styles.xml . Ресурсы стилей по умолчанию находятся в res/values/styles.xml .
Пример с несколькими квалификаторами:
- Layout-ресурсы, предназначенные для расположения элементов справа налево и использования в «ночном» режиме, будут находиться в папке res/layout-ldrtl-night/. Это правильное имя папки, потому что в таблице квалификатор для направления элементов указан до того, как указан квалификатор для ночного режима. Папка с именами квалификаторов в обратном порядке (res/layout-night-ldrtl) будет неправильной.
Создание альтернативных ресурсов
Чтобы создать папки альтернативных ресурсов в Android Studio, выберите Android на панели Project, согласно указателю на рисунке ниже.
Чтобы использовать Android Studio для создания новой папки альтернативных ресурсов для определённой конфигурации в папке res, придерживайтесь следующей инструкции:
- Убедитесь, что вы используете панель Project > Android, как показано выше.
- Щелкните правой кнопкой мыши по папке res и выберите New > Android resource directory. Откроется диалоговое окно создания нового ресурса.
- Выберите необходимые для данного набора альтернативных ресурсов тип и квалификаторы.
- Нажмите ОК.
Сохраните альтернативные ресурсы в новой папке. Обратите внимание, что альтернативные файлы ресурсов должны быть названы точно так же, как файлы ресурсов по умолчанию (например, styles.xml или dimens.xml ).
Основные квалификаторы альтернативных ресурсов
Ориентация экрана
Квалификатор ориентации экрана имеет два возможных значения:
- port: Устройство находится в портретном режиме (вертикальном). Так, res/layout-port/ будет содержать layout-файлы, которые будут использоваться, когда устройство находится в портретном режиме.
- land: Устройство находится в альбомном режиме (горизонтальном). Соответственно, res/layout-land/ будет содержать layout-файлы, которые будут использоваться, когда устройство находится в альбомном режиме.
Если пользователь поворачивает экран во время работы приложения и в приложении есть альтернативные ресурсы для такого случая, Android автоматически перезагружает приложение с использованием альтернативных ресурсов, которые будут соответствовать новой конфигурации устройства.
Чтобы создать layout для альбомной ориентации и больших дисплеев, используйте layout-редактор. Для этого следуйте указаниям ниже:
- Откройте XML-файл (например, activity_main.xml ) в Android Studio. Появится layout-редактор.
- Перейдите на вкладку Design в нижней части редактора макетов (если он еще не выбран).
- Нажмите на кнопку Orientation in Editor на верхней панели инструментов.
- Выберите параметр Create Landscape Variation.
- Для альбомной (горизонтальной) вариации откроется новое окно редактора с файлом land/activity_main.xml . Вы можете изменить этот layout для альбомной ориентации, не изменяя исходную портретную (вертикальной) ориентацию.
- Перейдите в каталог res > layout из панели Project > Android, и вы увидите, что Android Studio автоматически создала для вас вариант с именем activity_main.xml (land) для альбомной версии activity_main.xml .
Версия платформы
Квалификатор версии платформы определяет минимальный уровень API, поддерживаемый устройством. Например, используйте v11 для API уровня 11 (устройства на Android 3.0 или выше).
Для работы изображений WebP требуется уровень API 14 (Android 4.0) или выше, а для их полной поддержки требуется уровень API 17 (Android 4.2) или выше. Если вы используете изображения WebP:
- Поместите версии изображений по умолчанию в папку res/drawable. Эти изображения должны быть формата, поддерживаемого всеми уровнями API, например PNG.
- Поместите версии изображений в формате WebP в папку res/drawable-v17. Если устройство использует API уровня 17 или выше, Android выберет эти ресурсы во время запуска приложения.
Локализация
Квалификатор локализации указывает язык и регион (опционально), который используется в приложении. Данный квалификатор представляет собой двухбуквенный ISO 639-1 код языка, за которым (опять же, опционально) следует двухбуквенный код региона (перед ним будет находиться строчная буква r).
Вы можете указать только язык, но только регион указать нельзя. Примеры:
- res/values-fr-rFR/strings.xml
Строки в этом файле используются на устройствах с французским языком во Франции. - res/mipmap-fr-rCA/strings.xml
Строки из этого файла будут используются на устройствах с французском языке, но уже в Канаде. - res/layout-ja/content_main.xml
Этот layout будет использоваться на устройствах с японским языком.
Если пользователь меняет язык или регион в системных настройках устройства во время работы приложения и в приложении есть соответствующие альтернативные ресурсы, то Android автоматически перезагрузит приложение, используя альтернативные ресурсы, которые соответствуют новой конфигурации устройства.
Ресурсы по умолчанию
Ресурсы по умолчанию определяют дизайн и контент по умолчанию для вашего приложения. Например, когда приложение работает на устройстве с языком, для которого вы не указали специфичный для него текст, Android загрузит строки по умолчанию из файла res/values/strings.xml. Если файл по умолчанию отсутствует или в нём отсутствует хотя бы одна критичная для работы приложения строка, то приложение просто не запустится и выдаст ошибку.
Ресурсы по умолчанию имеют стандартные имена папок ресурсов (например, values) без квалификаторов в названии папки или скобок после названий файлов.
Совет: всегда предоставляйте ресурсы по умолчанию, поскольку очень вероятно, что ваше приложение будет работать с устройствами, конфигурации которых не были предусмотрены.
Источник
Как определить dimens.xml для каждого разного размера экрана в android?
При поддержке различных размеров экрана (плотностей) в Android часто основное внимание уделяется созданию различных макетов для каждого возможного экрана. I.E.
Я разработал макет экрана xhdpi в качестве эталона и определил его размеры в dimens.xml . Теперь я хочу дать ему поддержку во всех возможных размерах экрана. Как я могу это сделать?
Насколько я знаю, я могу использовать этот инструмент, чтобы выяснить правильный dimens.xml для других размеров экрана и добавить его в свой проект. Правильно ли это делать в моей ситуации?
Другой вопрос, нужно ли мне создавать dimens.xml только для вышеуказанных размеров экрана? Если да, то что такое w820dp ?
Спасибо за помощь. Мне нужно поддерживать только телефоны (а не планшеты или другие устройства).
9 ответов
В моем приложении я создаю несколько TextViews динамически, и размер текста для каждого из них я получаю из значения, хранящегося в папке dimens.xml в папке values. С одной стороны, у меня есть Nexus 4, а с другой-Nexus 10. Оба имеют одинаковое ведро плотности xhdpi, но один имеет размер экрана.
Теперь я пытаюсь быть хорошим разработчиком Android и поместить все мои textsize и другие спецификации размера, а также все стили (например, цвет кнопок и т. д.) В файлы XML. Я пытаюсь почитать об этом. В потоке Stackoverflow я читал о dimens.xml . Поэтому я создал dimens.xml под каждым каталогом.
Вы должны создать разные папки значений для разных экранов . Нравится
Для получения дополнительной информации вы можете посетить здесь
Вы можете использовать плагин Android Studio под названием Dimenify для автоматического создания значений размеров для других сегментов пикселей на основе пользовательских коэффициентов масштаба. Он все еще находится в бета-версии, не забудьте уведомить разработчика о любых проблемах/предложениях, с которыми вы столкнетесь.
Используйте Масштабируемый DP
Хотя создание различной компоновки для разных размеров экрана теоретически является хорошей идеей, ее может быть очень трудно приспособить для всех размеров экрана и плотности пикселей. Имея более 20+ различных файлов dimens.xml , как указано в приведенных выше ответах, управлять ими совсем не просто.
Как Использовать:
Для использования sdp :
- Включите implementation ‘com.intuit.sdp:sdp-android:1.0.5’ в свой build.gradle ,
Замените любое значение dp , например 50dp , на @dimen/50_sdp , например:
Как Это Работает:
sdp масштабируется с размером экрана, потому что это, по сути, огромный список различных dimens.xml для каждого возможного значения dp .
Увидеть Его В Действии:
Здесь он находится на трех устройствах с сильно различающимися размерами экрана и плотностью:
Обратите внимание, что расчет единицы измерения размера sdp включает некоторое приближение из-за некоторых ограничений производительности и удобства использования.
Если у меня есть макет таблицы, скажем, с 2 строками и 2 столбцами. Каждое поле таблицы квадранта имеет статический текст, например box_11, box_12, box_21, box_22. Я хочу, чтобы размер текста был больше для большего экрана и меньше для маленьких экранов. Я хочу, чтобы текст масштабировался в.
Я хотел бы загрузить dimens.xml в зависимости от размера экрана, но использовать одни и те же цвета независимо от размера экрана. У меня есть следующая структура каталогов res res/values colors.xml res/values-small dimens.xml res/values-normal dimens.xml res/values-large dimens.xml.
мы хотим видеть изменения требуемого размера представления на разных экранах.
Нам нужно создать разные папки значений для разных экранов и поместить файл dimens.xml в зависимости от плотности экрана.
Я взял один TextView и наблюдал изменения, когда я изменил dimens.xml в разных папках значений.
Пожалуйста, следуйте этому процессу
нормальный — xhdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем нормальный — xhdpi \ dimens.xml
nexus 5X ( 5.2″ * 1080 * 1920 : 420dpi )
nexus 6P ( 5.7″ * 1440 * 2560 : 560dpi)
nexus 6 ( 6.0″ * 1440 * 2560 : 560dpi)
nexus 5 (5.0″, 1080 1920 : xxhdpi)
nexus 4 (4.7″, 768 * 1280 : xhdpi)
Galaxy nexus (4.7″, 720 * 1280 : xhdpi)
4.65″ 720p ( 720 * 1280 : xhdpi )
4.7″ WXGA ( 1280 * 720 : Xhdpi )
Xlarge — xhdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем Xlarge — xhdpi \ dimens.xml
nexus 9 ( 8.9″, 2048 * 1556 : xhdpi)
nexus 10 (10.1″, 2560 * 1600 : xhdpi)
большой — xhdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем большой — xhdpi \ dimens.xml
nexus 7 ( 7.0″, 1200 * 1920: xhdpi)
нексус 7 (2012) (7.0″, 800 * 1280 : tvdpi)
Нижеприведенные экраны видны в разделе » Поиск общих телефонов и планшетов «
большой — mdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем большой — mdpi \ dimens.xml
5.1″ WVGA ( 480 * 800 : mdpi )
5.4″ FWVGA ( 480 * 854 : mdpi )
7.0″ WSVGA (планшет) ( 1024 * 600 : mdpi )
нормальный — hdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов при изменении нормального — hdpi \ dimens.xml
nexus s ( 4.0″, 480 * 800 : hdpi )
nexus one ( 3.7″, 480 * 800: hdpi)
малый — ldpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем small — ldpi \ dimens.xml
2.7″ Слайдер QVGA ( 240 * 320 : ldpi )
2.7″ QVGA ( 240 * 320 : ldpi )
xlarge — mdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем xlarge — mdpi \ dimens.xml
10.1″ WXGA ( планшет) ( 1280 * 800 : MDPI )
нормальный — ldpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем нормальный — ldpi \ dimens.xml
3.3″ WQVGA ( 240 * 400 : LDPI )
3.4″ WQVGA ( 240 * 432 : LDPI )
нормальный — hdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем нормальный — hdpi \ dimens.xml
4.0″ WVGA ( 480 * 800 : hdpi )
3.7″ WVGA ( 480 * 800 : hdpi )
3.7″ FWVGA Слайдер ( 480 * 854 : hdpi )
нормальный — mdpi \ dimens.xml
Нижеприведенные устройства могут изменять размеры экранов, когда мы меняем нормальный — mdpi \ dimens.xml
3.2″ Ползунок HVGA ( ADP1 ) ( 320 * 480 : MDPI )
3.2″ QVGA ( ADP2 ) ( 320 * 480 : MDPI )
Есть хорошие библиотеки, которые справятся со всем и уменьшат вашу боль. Для его использования просто добавьте две зависимости в gradle:
После этого используйте dimens следующим образом:
Я загрузил простую программу java, которая принимает в качестве входных данных местоположение вашего проекта и файл измерения, который вы хотите. Исходя из этого, он выведет соответствующий файл измерения в консоль. Вот ссылка на него:
Вот полный код для справки:
Вы можете поместить dimens.xml в
1) ценности
2) значения-hdpi
3) значения-xhdpi
4) значения-xxhdpi
И дайте разные размеры в dimens.xml в соответствующих папках в соответствии с плотностью.
Вы должны создать другую папку values для разных экранов и поместить файл dimens.xml в соответствии с плотностью.
Если вы хотите просмотреть больше: Вот ссылка на список устройств (планшетных, мобильных, часов), включая watch , chromebook , windows и mac . Здесь вы можете найти плотность, размеры и т. Д. Просто на основе этого здесь, это хороший ресурс, если вы тоже используете эмулятор.
Если вы нажмете на определенный элемент, он покажет более подробную информацию в правой части.
Поскольку это Android , я опубликую сообщение, связанное с ним.
— Будет лучше, если вы сохраните копию веб-сайта. Чтобы просмотреть его в автономном режиме.
Android 3.2 вводит новый подход к размерам экрана,числа, описывающие размер экрана, все в “dp” units.Mostly, которые мы можем использовать
наименьшая ширина dp: наименьшая ширина, доступная для макета приложения в единицах “dp”; это наименьшая ширина dp, с которой вы когда-либо столкнетесь при любом повороте дисплея.
Чтобы создать один каталог ресурсов, щелкните правой кнопкой мыши на res >>> new >>> Android
Из окна Доступные квалификаторы переместите наименьшую ширину экрана в Выбранные квалификаторы
В окне ширины экрана просто напишите значение «dp», начиная с того, что вы хотели бы использовать Android Studio, чтобы использовать эти размеры.
Чем перейти к представлению проекта ,щелкните правой кнопкой мыши на новом созданном каталоге ресурсов
новый >>> Значения файла ресурсов введите новое имя файла dimens.xml , и все готово.
Похожие вопросы:
У меня есть меню dashboard, которое отлично работает на Android. Он имеет восемь ImageViews и работает именно так, как мне нужно. ——————- | | | | 1 | 2 | ——————-.
В Android мы можем указать ресурсы в зависимости от размера экрана, добавив квалификаторы к именам папок, например res/values-xlarge. Я работаю над большим корпоративным приложением, которое имеет.
Мне нужно выбрать конкретный dimens.xml во время выполнения после того, как мое приложение проверит возможности экрана. Я не хочу, чтобы ANDROID выбирал его для меня, выбирая автоматически по папке.
В моем приложении я создаю несколько TextViews динамически, и размер текста для каждого из них я получаю из значения, хранящегося в папке dimens.xml в папке values. С одной стороны, у меня есть.
Теперь я пытаюсь быть хорошим разработчиком Android и поместить все мои textsize и другие спецификации размера, а также все стили (например, цвет кнопок и т. д.) В файлы XML. Я пытаюсь почитать об.
Если у меня есть макет таблицы, скажем, с 2 строками и 2 столбцами. Каждое поле таблицы квадранта имеет статический текст, например box_11, box_12, box_21, box_22. Я хочу, чтобы размер текста был.
Я хотел бы загрузить dimens.xml в зависимости от размера экрана, но использовать одни и те же цвета независимо от размера экрана. У меня есть следующая структура каталогов res res/values colors.xml.
При создании нового проекта в android studio по следующему пути были созданы два файла xml по умолчанию. ..res/values/dimens.xml ..res/values/dimens.xml(w820dp) Я знаю о файле dimens.xml , где мы.
Я новичок android разработчик. Недавно я читаю спецификацию Google о предоставлении альтернативных ресурсов для поддержки различных размеров экрана.
Источник