Подтвердить что ты не робот

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

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

  • ldpi
  • MDPI
  • ИПЧР
  • xhdpi
  • xxhdpi
  • xxxhdpi

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

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

Другой вопрос: Мне нужно только создать dimens.xml для вышеупомянутых размеров экрана? Если да, то что такое w820dp?

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

4b9b3361

Ответ 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

Используйте масштабируемый 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 единицы размера 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, и все готово.