Как определить dimens.xml для каждого размера экрана в Android?
При поддержке разных размеров экрана (плотности) в Android часто основное внимание уделяется созданию различных макетов для каждого возможного экрана. То есть.
- ldpi
- MDPI
- ИПЧР
- xhdpi
- xxhdpi
- xxxhdpi
Я разработал макет для экрана xhdpi в качестве ссылки и определил его размеры в dimens.xml. Теперь Я хочу предоставить поддержку для каждого возможного размера экрана. Как я могу это сделать?
Насколько я знаю, я могу использовать этот инструмент для определения правильного dimens.xml для других размеры экрана и добавить его в мой проект. Это правильный способ сделать это в моей ситуации?
Другой вопрос: Мне нужно только создать dimens.xml для вышеупомянутых размеров экрана? Если да, то что такое w820dp
?
Спасибо за вашу помощь. Мне нужно поддерживать только телефоны (а не планшеты или другие устройства).
Ответы
Ответ 1
Вам нужно создать папку Различные значения для разных экранов.
Как
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, чтобы автоматически генерировать значения измерения для других пиксельных ковшей на основе пользовательских масштабных коэффициентов. Он по-прежнему в бета-версии, обязательно сообщите о каких-либо проблемах/предложениях, с которыми вы сталкиваетесь с разработчиком.
Ответ 2
мы хотим видеть изменения требуемого размера вида на разных экранах.
Нам нужно создать папки с разными значениями для разных экранов и поместить файл dimens.xml на основе плотности экрана.
Я взял один TextView и наблюдал изменения, когда я изменил dimens.xml в
папки с различными значениями.
Пожалуйста, следуйте процедуре
normal - 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)
Галактическая связь (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)
large - xhdpi\dimens.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении большого размера - xhdpi\dimens.xml
nexus 7 (7.0 ", 1200 * 1920: xhdpi)
nexus 7 (2012) (7,0 ", 800 * 1280: tvdpi)
Нижеприведенные экраны видны в разделе "Поиск общих телефонов и планшетов"
large - mdpi\dimens.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении большого размера - mdpi\dimens.xml
5.1 "WVGA (480 * 800: mdpi)
5.4 "FWVGA (480 * 854: mdpi)
7,0 "WSVGA (планшет) (1024 * 600: mdpi)
normal - hdpi\dimens.xml
Нижеуказанные устройства могут изменять размеры экранов при изменении нормального - hdpi\dimens.xml
nexus s (4.0 ", 480 * 800: hdpi)
nexus one (3,7 ", 480 * 800: hdpi)
small - ldpi\dimens.xml
Нижеуказанные устройства могут изменять размеры экранов при изменении маленького ldpi\dimens.xml
2.7 "QVGA Slider (240 * 320: ldpi)
2,7 "QVGA (240 * 320: ldpi)
xlarge - mdpi\dimens.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении xlarge-mdpi\dimens.xml
10.1 "WXGA (tABLET) (1280 * 800: MDPI)
normal - ldpi\dimens.xml
Приведенные ниже устройства могут изменять размеры экранов при изменении нормального - ldpi\dimens.xml
3,3 "WQVGA (240 * 400: LDPI)
3,4 "WQVGA (240 * 432: LDPI)
normal - hdpi\dimens.xml
Нижеуказанные устройства могут изменять размеры экранов при изменении нормального - hdpi\dimens.xml
4.0 "WVGA (480 * 800: hdpi)
3,7 "WVGA (480 * 800: hdpi)
3,7 "FWVGA Slider (480 * 854: hdpi)
normal - mdpi\dimens.xml
Нижеуказанные устройства могут изменять размеры экранов при изменении нормального - mdpi\dimens.xml
3.2 "HVGA Slider (ADP1) (320 * 480: MDPI)
3.2 "QVGA (ADP2) (320 * 480: MDPI)
Ответ 3
Хотя теоретически хорошей идеей является создание разного макета для экрана разных размеров, его может быть очень трудно приспособить для всех размеров экрана и плотности пикселей. Имея более 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
.
![enter image description here]()
Увидеть его в действии:
Здесь это на трех устройствах с широко различающимися размерами экрана и плотности:
![enter image description here]()
Обратите внимание, что sdp
единицы размера sdp
включает некоторую аппроксимацию из-за некоторых ограничений производительности и удобства использования.
Ответ 4
Вам нужно создать другую папку 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)
Ответ 5
Я загрузил простую 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);
}
}
Ответ 6
Вы можете поместить dimens.xml
в
1) значения
2) значения-hdpi
3) значения-xhdpi
4) значения-xxhdpi
И укажите разные размеры в dimens.xml
в соответствующих папках в соответствии с плотностями.
Ответ 7
Если вы хотите просмотреть больше: здесь ссылка для списка устройств (планшет, мобильный, часы), включая watch
, chromebook
, windows
и mac
. Здесь вы можете найти плотность, размеры и т.д. Просто основываясь на этом, это хороший ресурс, если вы тоже используете эмулятор.
Если вы нажмете на конкретный элемент, он отобразит более подробную информацию в правой части.
![sample]()
Так как это Android
, я опубликую связанный с ним.
![sample1]()
![sample2]()
~ Лучше, если вы сохраните копию Интернета. Чтобы просмотреть его в автономном режиме.
Ответ 8
Есть хорошие библиотеки, которые справятся со всем и уменьшат вашу боль. Для его использования просто добавьте две зависимости в 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"
Ответ 9
Android 3.2 вводит новый подход к размерам экрана, номера, описывающие размер экрана, находятся в единицах "dp" . Могу мы использовать
наименьшая ширина dp: самая малая ширина, доступная для макета приложения в единицах "dp" ; это наименьшая ширина dp, с которой вы когда-либо столкнетесь при любом повороте дисплея.
Чтобы создать один щелчок правой кнопкой мыши по res → > новый → > Каталог ресурсов Android
От Доступные квалификаторы переместить окно Наименьшая ширина экрана до Выбранные квалификаторы
В окне Ширина экрана просто напишите значение "dp" , начиная с вас, если бы Android Studio использовала этот размер.
Чем изменится представление Проект, щелкните правой кнопкой мыши новый каталог ресурсов
новый → > Файл ресурсов значений введите новое имя файла dimens.xml, и все готово.