Як визначити dimens.xml для кожного різного розміру екрана в android?


128

Підтримуючи різні розміри екрану (щільність) в Android, часто акцент робиться на створенні різних макетів для кожного можливого екрану. IE

  • ldpi
  • mdpi
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

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

Наскільки я знаю, я можу використовувати цей інструмент, щоб визначити належний розмір.xml для інших розмірів екрана та додати його до свого проекту. Це правильний спосіб зробити це в моїй ситуації?

Ще одне питання: чи потрібно лише створити dimens.xml для вище розмірів екрана? Якщо так, то що таке w820dp?

Спасибі за вашу допомогу. Мені потрібно підтримувати лише телефони (не планшети чи інші пристрої).


1
Так, ви повинні створити різні dimesn.xmlфайли для різних роздільних можливостей.
Піюш

@PiyushGupta Що буде для всіх вище розмірних екранів? Але що W820dpце щось, що підтримує різні версії Android? Ви також можете запропонувати мені будь-який підручник щодо підтримки різних екранів на основі dimens.xml?
Аміт Пал

Це для планшетів або для інших. Інакше, як я вже сказав, вам потрібно створити іншу папку значень.
Піюш

Відповіді:


266

Вам потрібно створити папку "Різні значення" для різних екранів . Подібно до

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 для автоматичного генерування значень розмірів для інших піксельних відра на основі індивідуальних масштабних факторів. Її все ще в бета-версії, обов'язково повідомте про будь-які проблеми / пропозиції, які ви натрапите на розробника.


1
чи не повинно бути "значень-sw480dp-hdpi" .xhdpi та xxhdpi тощо? у вашій відповіді є лише 320dp. Будь ласка, відповідь
Різкий край

2
@IntelliJAmiya: Ви повинні зазначити різницю між Android <= 3.2 та> 3.2.
juergen d

5
@IntelliJAmiya Я створив плагін студії під назвою Dimenify. Це дозволяє легко створювати розміри для інших відра. Чи можете ви додати редагування з тим самим, щоб інші могли скористатися ним? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie

3
Цей Dimenify є чудовим інструментом
Мухаммед Refaat

1
@IntelliJAmiya точно, з’являться нові випуски, які не будуть охоплені цими папками та / або можуть не відповідати певній папці.
ralphgabb

35

Використовуйте масштабований 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значення.

введіть тут опис зображення

Дивіться це в дії:

Ось це три пристрої з різними розмірами екрана та щільністю екрана:

введіть тут опис зображення

Зауважте, що sdpрозрахунок одиниці розміру включає деяке наближення через деякі обмеження продуктивності та зручності використання.


Дуже вдячний. Це було дуже корисно для мене.
twenk11k

@Advait, будь ласка, скажіть мені, які папки значень я повинен використовувати для Samsung Edge 7 з 5,5-дюймовим мобільним телефоном з роздільною здатністю 2560x1440?
ULHAS PATIL

@Advait в даний час я використовую папку значень-xxhdpi, але проблема полягає в тому, що вона бере ту саму папку для 5, 5,5 і 6 екранів тієї ж папки, так що прокрутка з’являється на 5-дюймових екранах і 5.5. Я цього не хочу. чи можете ви мені допомогти в цьому?
ULHAS PATIL

@Advait S значення-xxhdpi для 5,5 "1080x1920 & також для 5,5" 1440x2560 Я хочу іншу папку для 5,5 "1440x2560.
ULHAS PATIL

@ULHASPATIL точно! Я зіткнувся з подібною проблемою і не розумію, як її вирішити. Ви знайшли рішення для екрана з подібними дюймами та різною роздільною здатністю пікселів?
Георгій Чеботарьов

27

ми хочемо побачити зміни необхідного розміру перегляду на різних екранах.

Нам потрібно створити різні папки значень для різних екранів і помістити файл dimens.xml на основі щільності екрана.

Я взяв один TextView і помітив зміни, коли я змінив dimens.xml в різних папках значень.

Будь ласка, слідкуйте за процесом

нормальний - xhdpi \ dimens.xml

Наведені нижче пристрої можуть змінювати розміри екранів, коли ми змінюємо нормальний - xhdpi \ dimens.xml

Nexus 5X (5,2 "* 1080 * 1920: 420dpi)

Nexus 6P (5,7 "* 1440 * 2560: 560 dpi)

Nexus 6 (6,0 "* 1440 * 2560: 560 dpi)

Nexus 5 (5,0 ", 1080 1920: xxhdpi)

Nexus 4 (4,7 ", 768 * 1280: xhdpi)

Nexus Galaxy (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 \ dimens.xml

Наведені нижче пристрої можуть змінювати розміри екранів, коли ми змінюємо великий - mdpi \ dimens.xml

5,1 "WVGA (480 * 800: mdpi)

5,4 "FWVGA (480 * 854: mdpi)

7,0 "WSVGA (планшетний ПК) (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 (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

Наведені нижче пристрої можуть змінювати розміри екранів, коли ми змінюємо нормальний - mdpi \ dimens.xml

3.2 "повзунок HVGA (ADP1) (320 * 480: MDPI)

3,2 "QVGA (ADP2) (320 * 480: MDPI)


Тож, на вашу думку, папки тоді б називалися чимось подібним values-normal-xhdpi?
VonSchnauzer

Так, я згоден з вами, замість того, щоб записувати значення - для всіх файлів, я сказав: "створюйте різні папки значень для різних розмірів тексту". Тому, будь ласка, прочитайте заголовок. Дякую.
koteswarao

9

Є приємні бібліотеки, які впораються з усім і зменшать ваш біль. Для його використання просто додайте дві залежності в 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"

3
Ось бібліотеки для довідок: SDP та SSP . І дякую за цю точну відповідь!
JorgeAmVF

7

Я завантажив просту програму 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

Вам потрібно створити іншу 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)

Де я можу отримати показник між розміром екрана? Як я можу бачити в інструменті, вони все визначали ldpi, mdpiманеру
Amit Pal

Це буде залежати від папки ваших значень, яка буде максимум отримувати з неї значення.
Піюш

Чи потрібно згадати values-xxhdpiпро Nexus 6?
Аміт Пал

Так, вам потрібно бути!
Піюш

320x480є типовим mdpi . Отже, valuesvalues-mdpi
введіть

6

Ви можете помістити dimens.xmlв

1) значення

2) значення-hdpi

3) значення-xhdpi

4) значення -xxhdpi

І дайте різні розміри у dimens.xmlвідповідних папках відповідно до густин.


2
Згідно з документацією на Android невелика / нормальна / велика кількість застарілих.
Бенджамін Месінг

1

У разі , якщо ви хочете , щоб дізнатися більше: Ось посилання на список пристроїв (планшети, мобільні, годинник), в тому числі watch, chromebook, windowsі mac. Тут ви можете знайти щільність, розміри та ін. Просто виходячи з цього документа, це хороший ресурс, якщо ви також використовуєте емулятор.

Якщо натиснути певний елемент, він відобразить більше деталей у правій частині. зразок

Оскільки це є Android, я буду публікувати пов’язані з цим. зразок1

зразок2

~ Краще, якщо ви збережете копію Інтернету. Щоб переглянути його в режимі офлайн.


1

Android 3.2 вводить новий підхід до розмірів екрана, цифри, що описують розмір екрана, усі в одиницях "dp". Найбільше ми можемо використовувати

найменша ширина dp: найменша ширина, доступна для макета програми в одиницях “dp”; це найменша точкова ширина dp, з якою ви коли-небудь стикаєтесь при будь-якому обертанні дисплея.

Щоб створити одним правою кнопкою миші на res >>> новий >>> каталог ресурсів Android

З вікна " Доступні класифікатори" перемістіть найменшу ширину екрана до вибраної кваліфікації

У ширині екрана вікні просто напишіть значення "dp", починаючи з того, що ви хотіли б, щоб Android Studio використовував ці розміри.

Тоді як змінити перегляд проекту , клацніть правою кнопкою миші на створеному вами каталозі ресурсів

новий >>> У файлі ресурсу значень введіть нове ім'я файлу dimens.xml і ви закінчите.


Дякуємо, що пояснили, як насправді створити ці папки.
Беко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.