Как определить размеры.xml для каждого размера экрана в android?


при поддержке различных размеров экрана (плотности) в Android часто основное внимание уделяется созданию различных макетов для каждого возможного экрана. То Есть

  • помогите
  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

Я разработал макет для xhdpi экран в качестве ссылки, и определяется это размеры in dimens.xml. Сейчас Я хочу дать ему поддержку для всех возможных размеров экрана. Как я могу это сделать?

насколько я знаю, я могу использовать этой инструмент, чтобы выяснить правильный dimens.xml для других размеров экрана и добавить его в мой проект. Это правильный способ сделать это в моей ситуации?

еще один вопрос,мне нужно только создать dimens.xml на экране выше размеры? Если да, то что такое w820dp?

Спасибо за вашу помощь. Мне нужно поддержать телефоны только (не таблетки или другие устройства).

8 93

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 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:

  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 ресурс каталог

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