Как определить 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

enter image description here

для получения дополнительной информации вы можете посетить здесь

различные папки значений в 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:

  1. включить implementation 'com.intuit.sdp:sdp-android:1.0.5' в своем build.gradle,
  2. заменить 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 расчет размера единицы включает в себя некоторое приближение из-за некоторых ограничений производительности и удобства использования.


в случае, если вы хотите смотреть больше: вот ссылке список устройств (планшет, мобильный, часы), в том числе watch,chromebook, windows и mac. Здесь вы можете найти плотность, размеры и т. д. Просто основываясь на этом, это хороший ресурс, если вы тоже используете эмулятор.

если вы нажмете определенный элемент, он покажет более подробную информацию в правой части. sample

С Android, я опубликую связанные с ним. sample1

sample2

~ лучше, если вы сохраните копию интернета. Чтобы просмотреть его в автономном режиме.


Android 3.2 представляет новый подход к размерам экрана, числа, описывающие размер экрана, все в единицах "dp".В основном мы можем использовать

наименьшая ширина dp: самая малая ширина доступная для плана применения в блоках" dp"; это самый малый DP ширины который вы всегда будете сталкиваться в любом вращении дисплея.

чтобы создать один щелчок правой кнопкой мыши на res >>> новая >>> ресурс Android каталог

с доступен отбор