Как определить dimens.xml для каждого размера экрана в android?
при поддержке различных размеров экрана (плотности) в Android часто основное внимание уделяется созданию различных макетов для каждого возможного экрана. Т. Е.
- ldpi
- mdpi
- hdpi
- xhdpi
- xxhdpi
- xxxhdpi
Я разработал макет для xhdpi экран в качестве ссылки и определяется это размеры in dimens.в XML. Теперь Я хочу поддержать его для каждого возможного размера экрана. Как я могу это сделать?
насколько я знаю, я могу использовать этой инструмент, чтобы выяснить правильный dimens.в XML для других размеров экрана и добавить его в мой проект. Правильно ли это в моей ситуации?
еще один вопрос,мне нужно только создать dimens.в XML на экране выше размеры? Если да, то что такое w820dp
?
Спасибо за помощь. Мне нужно поддержать телефоны только (не таблетки или другие устройства).
8 ответов
вы должны создать различные значения папки для разных экранов . Как
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
редактировать By @humblerookie
вы можете использовать плагин Android Studio под названием Dimenify для автоматического создания значений размеров для других пикселов на основе пользовательских масштабных коэффициентов. Его все еще в бета-версии, не забудьте уведомить о любых проблемах/предложениях, с которыми вы сталкиваетесь с разработчиком.
мы хотим видеть изменения требуемого размера представления на разных экранах.
нам нужно создать разные папки значений для разных экранов и поставить 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)
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)
nexus 7 (2012) (7.0", 800 * 1280 : tvdpi)
нижеприведенные экраны видны в разделе " Поиск общих телефонов и планшетов "
большой - с mdpi \ дименс.в XML
нижеприведенные устройства могут изменять размеры экранов при изменении больших-mdpi \ dimens.в XML
5.1 " WVGA (480 * 800 : mdpi )
5.4" FWVGA (480 * 854 : mdpi )
7.0 " WSVGA (Tablet) (1024 * 600 : mdpi)
нормальный-hdpi \ дименс.в 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 (240 * 320 : ldpi )
2.7 " QVGA (240 * 320: ldpi )
экст - с mdpi \ дименс.в XML
приведенные ниже устройства могут изменять размеры экранов при изменении xlarge-mdpi \ dimens.в XML
10.1 " WXGA (tABLET) (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)
normal-mdpi \ dimens.в XML
приведенные ниже устройства могут изменять размеры экранов, когда мы меняем нормальный-mdpi \ дименс.в XML
3.2" слайдер HVGA (ADP1) (320 * 480 : MDPI)
3.2 " QVGA ( ADP2) (320 * 480 : MDPI )
вы должны создать другой values
папка для разных экранов и put 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)
Я загрузил простую 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);
}
}
Вы можете поставить dimens.xml
на
1) значения
2) значения-hdpi
3) значения-xhdpi
4) значения-xxhdpi
и дайте различные размеры в dimens.xml
в соответствующие папки по плотности.
использовать масштабируемый 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
расчет размера единицы включает в себя некоторое приближение из-за некоторых ограничений производительности и удобства использования.
в случае, если вы хотите смотреть больше: вот ссылке список устройств (планшет, мобильный, часы), в том числе watch
,chromebook
, windows
и mac
. Здесь вы можете найти плотность, размеры и т. д. Просто основываясь на этом, это хороший ресурс, если вы тоже используете эмулятор.
если вы нажмете определенный элемент, он покажет более подробную информацию в правой части.
С Android
, я опубликую связанные с ним.
~ лучше, если вы сохраните копию интернета. Чтобы просмотреть его в автономном режиме.
Android 3.2 представляет новый подход к размерам экрана, числа, описывающие размер экрана, все в единицах "dp".В основном мы можем использовать
наименьшая ширина dp: самая малая ширина доступная для плана применения в блоках" dp"; это самый малый DP ширины который вы всегда будете сталкиваться в любом вращении дисплея.
чтобы создать один щелчок правой кнопкой мыши на res >>> новая >>> ресурс Android каталог
с доступен отбор