Как определить размеры. XML для каждого размера экрана в Android?
При поддержке разных размеров экрана (плотности) в Android часто основное внимание уделяется созданию разных макетов для каждого возможного экрана. IE
- ldpi
- MDPI
- ИПЧР
- xhdpi
- xxhdpi
- xxxhdpi
Я разработал макет для экрана xhdpi в качестве справочного материала и определил его размеры в dimensions.xml. Теперь я хочу поддержать его на всех возможных размерах экрана. Как я могу это сделать?
Насколько я знаю, я могу использовать этот инструмент, чтобы выяснить правильные размеры.xml для других размеров экрана и добавить его в свой проект. Это правильный способ сделать это в моей ситуации?
Другой вопрос, нужно ли мне только создавать размер.xml для размеров экрана выше? Если да, то что w820dp
?
Спасибо за вашу помощь. Мне нужно поддерживать только телефоны (не планшеты или другие устройства).
10 ответов
Вы должны создать папку "Разные значения" для разных экранов. подобно
values-sw720dp 10.1” tablet 1280x800 mdpi
values-sw600dp 7.0” tablet 1024x600 mdpi
values-sw480dp 5.4” 480x854 mdpi
values-sw480dp 5.1” 480x800 mdpi
values-xxhdpi 5.5" 1080x1920 xxhdpi
values-xxxhdpi 5.5" 1440x2560 xxxhdpi
values-xhdpi 4.7” 1280x720 xhdpi
values-xhdpi 4.65” 720x1280 xhdpi
values-hdpi 4.0” 480x800 hdpi
values-hdpi 3.7” 480x854 hdpi
values-mdpi 3.2” 320x480 mdpi
values-ldpi 3.4” 240x432 ldpi
values-ldpi 3.3” 240x400 ldpi
values-ldpi 2.7” 240x320 ldpi
Для получения дополнительной информации вы можете посетить здесь
Различные значения папок в Android
http://android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html
Отредактировано humblerookie
Вы можете использовать плагин Android Studio под названием Dimenify для автоматической генерации значений размеров для других блоков пикселей на основе пользовательских масштабных коэффициентов. Он все еще находится в бета-версии, обязательно сообщите о любых проблемах / предложениях, с которыми вы столкнетесь, разработчику.
Используйте масштабируемый DP
Хотя теоретически хорошая идея сделать разную компоновку для экрана разных размеров, это может быть очень трудно приспособить для всех размеров экрана и плотности пикселей. Более 20 разных dimens.xml
Файлы, как указано в ответах выше, не так просто управлять.
Как пользоваться:
Использовать sdp
:
- Включают
implementation 'com.intuit.sdp:sdp-android:1.0.5'
в вашемbuild.gradle
, Заменить любой
dp
значение, такое как50dp
с@dimen/50_sdp
вот так:<TextView android:layout_width="@dimen/_50sdp" android:layout_height="@dimen/_50sdp" android:text="Hello World!" />
Как это устроено:
sdp
масштабируется с размером экрана, потому что это по сути огромный список различных dimens.xml
на все возможные dp
значение.
Увидеть его в действии:
Здесь это на трех устройствах с широко различающимися размерами экрана и плотности:
Обратите внимание, что sdp
Расчет размера единицы включает в себя некоторое приближение из-за некоторых ограничений производительности и удобства использования.
Мы хотим видеть изменения требуемого размера просмотра на разных экранах.
Нам нужно создать разные папки значений для разных экранов и поместить файл измерения. XML в зависимости от плотности экрана.
Я взял один TextView и наблюдал за изменениями, когда я изменял Dimens.xml в разных папках значений.
Пожалуйста, следуйте процессу
нормальный - xhdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем обычные - xhdpi \ dimensions.xml
Nexus 5X ( 5,2" * 1080 * 1920: 420 точек на дюйм)
Nexus 6P ( 5, 7" * 1440 * 2560: 560 точек на дюйм)
Nexus 6 ( 6,0" * 1440 * 2560: 560 точек на дюйм)
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 \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении Xlarge - xhdpi \ dimensions.xml.
Nexus 9 ( 8,9", 2048 * 1556: xhdpi)
Nexus 10 (10,1", 2560 * 1600: xhdpi)
большой - xhdpi \ dimensions.xml
Приведенные ниже устройства могут менять размеры экранов, когда мы меняем большие - xhdpi \ dimensions.xml
Nexus 7 (7,0 ", 1200 * 1920: xhdpi)
Nexus 7 (2012) (7,0 ", 800 * 1280: tvdpi)
Приведенные ниже экраны отображаются в "Поиск общих телефонов и планшетов"
большой - mdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем большие - mdpi \ dimensions.xml
5,1" WVGA ( 480 * 800: т / д)
5,4" FWVGA ( 480 * 854: т / д)
7,0" WSVGA (планшет) ( 1024 * 600: т / д)
нормальный - hdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем обычные - hdpi \ sizess.xml
Nexus S (4,0 ", 480 * 800: HDMI)
Nexus One (3, 7 ", 480 * 800: HDMI)
маленький - ldpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем маленькие - ldpi \ sizess.xml
2.7 "QVGA Slider (240 * 320: ldpi)
2, 7 "QVGA (240 * 320: ldpi)
xlarge - mdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении xlarge - mdpi \ dimensions.xml
10,1" WXGA (планшет) ( 1280 * 800: MDPI)
нормальный - ldpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем нормальные - ldpi \ dimensions.xml
3,3 "WQVGA (240 * 400: LDPI)
3,4" WQVGA ( 240 * 432: LDPI)
нормальный - hdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем обычные - hdpi \ sizess.xml
4,0" WVGA ( 480 * 800: HDMI)
3, 7" WVGA ( 480 * 800: HDMI)
3, 7-дюймовый слайдер FWVGA (480 * 854: HDMI)
обычный - mdpi \ dimensions.xml
Приведенные ниже устройства могут изменять размеры экранов, когда мы меняем обычные - mdpi \ dimensions.xml
Слайдер 3,2" HVGA (ADP1) (320 * 480: MDPI)
3,2" QVGA ( ADP2) ( 320 * 480: MDPI)
Есть хорошие библиотеки, которые справятся со всем и уменьшат вашу боль. Для его использования просто добавьте две зависимости в gradle:
implementation 'com.intuit.ssp:ssp-android:1.0.5'
implementation 'com.intuit.sdp:sdp-android:1.0.5'
После этого используйте dimens
как это:
android:layout_marginTop="@dimen/_80sdp"
Я загрузил простую Java-программу, которая принимает местоположение вашего проекта и файл измерения, который вы хотите ввести. Исходя из этого, он выведет соответствующий файл измерений в консоль. Вот ссылка на него:
https://github.com/akeshwar/Dimens-for-different-screens-in-Android/blob/master/Main.java
Вот полный код для ссылки:
public class Main {
/**
* You can change your factors here. The current factors are in accordance with the official documentation.
*/
private static final double LDPI_FACTOR = 0.375;
private static final double MDPI_FACTOR = 0.5;
private static final double HDPI_FACTOR = 0.75;
private static final double XHDPI_FACTOR = 1.0;
private static final double XXHDPI_FACTOR = 1.5;
private static final double XXXHDPI_FACTOR = 2.0;
private static double factor;
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("Enter the location of the project/module");
String projectPath = in.nextLine();
System.out.println("Which of the following dimension file do you want?\n1. ldpi \n2. mdpi \n3. hdpi \n4. xhdpi \n5. xxhdpi \n6. xxxhdpi");
int dimenType = in.nextInt();
switch (dimenType) {
case 1: factor = LDPI_FACTOR;
break;
case 2: factor = MDPI_FACTOR;
break;
case 3: factor = HDPI_FACTOR;
break;
case 4: factor = XHDPI_FACTOR;
break;
case 5: factor = XXHDPI_FACTOR;
break;
case 6: factor = XXXHDPI_FACTOR;
break;
default:
factor = 1.0;
}
//full path = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/src/main/res/values/dimens.xml"
//location of the project or module = "/home/akeshwar/android-sat-bothIncluded-notintegrated/code/tpr-5-5-9/princetonReview/"
/**
* In case there is some I/O exception with the file, you can directly copy-paste the full path to the file here:
*/
String fullPath = projectPath + "/src/main/res/values/dimens.xml";
FileInputStream fstream = new FileInputStream(fullPath);
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
while ((strLine = br.readLine()) != null) {
modifyLine(strLine);
}
br.close();
}
private static void modifyLine(String line) {
/**
* Well, this is how I'm detecting if the line has some dimension value or not.
*/
if(line.contains("p</")) {
int endIndex = line.indexOf("p</");
//since indexOf returns the first instance of the occurring string. And, the actual dimension would follow after the first ">" in the screen
int begIndex = line.indexOf(">");
String prefix = line.substring(0, begIndex+1);
String root = line.substring(begIndex+1, endIndex-1);
String suffix = line.substring(endIndex-1,line.length());
/**
* Now, we have the root. We can use it to create different dimensions. Root is simply the dimension number.
*/
double dimens = Double.parseDouble(root);
dimens = dimens*factor*1000;
dimens = (double)((int)dimens);
dimens = dimens/1000;
root = dimens + "";
System.out.println(prefix + " " + root + " " + suffix );
}
System.out.println(line);
}
}
Вы должны создать другой values
папку для разных экранов и ставить dimens.xml
файл в соответствии с плотностями.
1) values
2) values-hdpi (320x480 ,480x800)
3) values-large-hdpi (600x1024)
4) values-xlarge (720x1280 ,768x1280 ,800x1280 ,Nexus7 ,Nexus10)
5) values-sw480dp (5.1' WVGA screen)
6) values-xhdpi (Nexus4 , Galaxy Nexus)
Вы можете положить dimens.xml
в
1) значения
2) значения-hdpi
3) значения-xhdpi
4) значения-xxhdpi
И дать разные размеры в dimens.xml
в соответствующих папках в зависимости от плотности.
Основной принцип повышения гибкости вашего кода заключается в инкапсуляции того, что меняется/меняется (или что, скорее всего, изменится).
Если размеры вашего корпуса меняются. Итак, вы начинаете с переноса ваших измерений (тех, которые, по вашему мнению, нужно изменить) из кода XML или из кода java/kotlin в файл values/dimens.xml.
В контексте этого вопроса. У вас могут быть папки res по квалификаторам плотности или по квалификаторам малой ширины.
values/dimens.xml
values-ldpi/dimens.xml
values-hdpi/dimens.xml
values/dimens.xml
values-sw320dp/dimens.xml
values-sw320dp/dimens.xml
Здесь важно отметить один важный момент: элементы в values/dimens.xml будут применяться к экранам, меньшим, чем самая низкая точка останова, которую вы указали.
values/dimens.xml //smallest screen
values-sw320dp/dimens.xml //320dp or more till next breakpoint folder
values-sw360dp/dimens.xml//360dp or more till next breakpoint folder
Еще один важный момент, который следует отметить, заключается в том, что устройство с высокой плотностью пикселей может иметь небольшой экран. Поэтому убедитесь, что вы хотите указать квалификатор плотности или квалификатор ширины экрана.
Небольшой брифинг для тех, кто плохо знаком с этим аспектом.
Вы можете добавлять квалификаторы в разные папки ресурсов, такие как значения, чертежи и макет.
Эти квалификаторы могут представлять язык (-en,-hi), ориентацию (-land,-port) или диапазон размеров экрана (-ldpi,-hdpi).
Соглашение об именах имеет иерархию квалификаторов, и квалификаторы должны добавляться только в этом порядке.
values-en-hdpi (it cannot be values-hdpi-en)
values-en-land-hdpi (it cannot be values values-hdpi-en-land or any other order)
layout-hdpi
Заказ задокументирован в Таблице 2 на этой странице
Некоторые квалификаторы представляют абсолютные значения, тогда как другие, такие как ldpi, hdpi, представляют собой точки останова.
Если вы хотите увидеть больше: Вот ссылка на список устройств (планшет, мобильный телефон, часы), в том числе watch
,chromebook
, windows
а также mac
, Здесь вы можете найти плотность, размеры и т. Д. Просто основываясь здесь, это хороший ресурс, если вы тоже используете эмулятор.
Если вы щелкнете по определенному элементу, он отобразит больше деталей в правой части.
Так как это Android
Буду публиковать, связанные с этим.
~ Лучше, если вы сохраните копию в Интернете. Для просмотра в автономном режиме.
В Android 3.2 представлен новый подход к размерам экрана: числа, описывающие размер экрана, приведены в единицах "dp". Чаще всего мы можем использовать
наименьшая ширина dp: наименьшая ширина, доступная для макета приложения в единицах "dp"; это самая маленькая ширина dp, с которой вы когда-либо сталкивались при любом повороте экрана.
Чтобы создать один щелчок правой кнопкой мыши на res >>> new >>> Каталог ресурсов Android
Из окна " Доступные квалификаторы" переместите наименьшую ширину экрана к выбранным классификаторам.
В окне Screen width просто напишите значение "dp", начиная с того, что вы хотите, чтобы Android Studio использовала эти размеры.
Затем перейдите в представление Project, щелкните правой кнопкой мыши на новом созданном каталоге ресурсов.
new >>> Значения файла ресурсов введите новое имя файла Dimens.xml, и все готово.