Как определить размеры.xml для каждого размера экрана в android?
при поддержке различных размеров экрана (плотности) в Android часто основное внимание уделяется созданию различных макетов для каждого возможного экрана. То Есть
- помогите
- 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 in разные значения папок.
пожалуйста, следуйте процессу
нормальный-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 : Лоллипоп )
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: лоллипоп)
Нексус 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 (Tablet) (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
нижеприведенные устройства могут изменять размеры экранов, когда мы меняем малый-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 )
нормальный-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
устройства, указанные ниже, можете изменить размеры экранов, когда мы меняем нормальный - будут добавлены в ближайшее время \ дименс.xml
3.2 " HVGA Slider (ADP1) (320 * 480 : MDPI)
3.2" QVGA (ADP2) (320 * 480 : MDPI)
вы должны создать другой
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)
Я загрузил простую программу 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 ресурс каталог
с доступен отбор





