Androidですべての異なる画面サイズに対してdimens.xmlを定義するにはどうすればよいですか?


128

Androidでさまざまな画面サイズ(密度)をサポートする場合、多くの場合、すべての可能な画面に対してさまざまなレイアウトを作成することに重点が置かれます。IE

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

参考としてxhdpi画面のレイアウトを設計し、その寸法dimens.xmlで定義しました。今、私は可能なすべての画面サイズをサポートしたいと思います。どうやってやるの?

私の知る限り、このツールを使用して、他の画面サイズの適切なdimens.xml把握し、プロジェクトに追加できます。これは私の状況でそれを行う正しい方法ですか?

別の質問、上記の画面サイズに対してのみdimens.xmlを作成する必要がありますか?はいの場合、何w820dpですか?

ご協力いただきありがとうございます。電話のみをサポートする必要があります(タブレットやその他のデバイスはサポートしません)。


1
はい、dimesn.xml解像度ごとに異なるファイルを作成する必要があります。
Piyush

@PiyushGuptaそれは上記のすべての次元の画面のためになりますか?しかし、それはW820dp異なるAndroidバージョンをサポートしているものとは何ですか?また、dimens.xmlに基づいて異なる画面をサポートするためのチュートリアルを教えていただけますか?
Amit Pal

それはタブレットまたは他の人のためです。それ以外の場合は、別の値フォルダーを作成する必要があると述べました。
Piyush

回答:


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 によって編集されました

Dimenifyと呼ばれるAndroid Studioプラグインを利用して、カスタムスケール係数に基づいて他のピクセルバケットの寸法値を自動生成できます。まだベータ版ですので、遭遇した問題や提案があれば必ず開発者に通知してください。


1
"values-sw480dp-hdpi" .xhdpiやxxhdpiなどはありませんか?320dpだけがそのような答えを持っています。返信してください
Sharp Edge

2
@IntelliJAmiya:Android <= 3.2と> 3.2の違いに言及する必要があります。
juergen d 2016

5
@IntelliJAmiya Dimenifyというスタジオプラグインを作成しました。これにより、他のバケットのディメンションを簡単に作成できます。他の人がそれを利用できるように同じで編集を追加できますか? plugins.jetbrains.com/androidstudio/plugin/9349-dimenify
humblerookie

3
このDimenifyは優れたツールです
Muhammed

1
@IntelliJAmiya確かに、それらのフォルダーでカバーされない、および/または特定のフォルダーでは適切でない可能性がある新しいリリースがあります。
ラルフガブ2017年

35

スケーラブルなDPを使用する

理論的には、画面サイズごとに異なるレイアウトを作成することをお勧めしますが、すべての画面サイズとピクセル密度に対応するのが非常に難しくなる場合があります。dimens.xml上記の回答で提案されているように20以上の異なるファイルを持つことは、管理がまったく簡単ではありません。

使い方:

使用するには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値ごとに異なるさまざまなリストが本質的に存在するためです。

ここに画像の説明を入力してください

実際に見る:

ここでは、画面のサイズと密度が大きく異なる3つのデバイスを使用しています。

ここに画像の説明を入力してください

sdpサイズの単位の計算には、パフォーマンスと使いやすさの制約があるため、近似値が含まれていることに注意してください。


とても感謝しております。これは本当に役に立ちました。
twenk11k

@Advaitでは、2560x1440解像度の5.5インチモバイルのSamsung Edge 7にどの値フォルダを使用すればよいか教えていただけますか?
ULHAS PATIL

@Advaitは現在values-xxhdpiフォルダを使用していますが、問題は、5、5.5、6画面の同じフォルダを同じフォルダに取っているため、5インチ画面と5.5にスクロールが表示されます。それは欲しくない。これで私を助けてくれませんか?
ULHAS PATIL

@Advait 1440x2560 5.5" 5.5"用1080x1920&またのためのS値-xxhdpi私は5.5" 1440x2560のために別のフォルダをしたい。
ULHASパティル

@ULHASPATIL正確に!私は同様の問題にぶつかり、それを解決する方法がわかりません。インチが同じでピクセル解像度が異なる画面の解決策を見つけましたか?
Georgiy Chebotarev

27

必要なビューサイズの変化をさまざまな画面で確認したい。

画面ごとに異なる値フォルダーを作成し、画面密度に基づいてdimens.xmlファイルを配置する必要があります。

1つのTextViewを取得し、さまざまな値のフォルダーでdimens.xmlを変更したときの変化を観察しました。

プロセスに従ってください

通常-xhdpi \ dimens.xml

以下のデバイスは、通常のxhdpi \ dimens.xmlを変更すると、画面のサイズを変更できます

ネクサス5X(5.2 "* 1080 * 1920:420dpi)

ネクサス6P(5.7 "* 1440 * 2560:560dpi)

ネクサス6(6.0 "* 1440 * 2560:560dpi)

ネクサス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を変更すると、画面のサイズを変更できます

ネクサス9(8.9 "、2048 * 1556:xhdpi)

ネクサス10(10.1インチ、2560 * 1600:xhdpi)

大-xhdpi \ dimens.xml

以下のデバイスは、サイズを変更すると画面のサイズを変更する可能性があります-xhdpi \ dimens.xml

Nexus 7(7.0インチ、1200 * 1920:xhdpi)

ネクサス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

ネクサスs(4.0 "、480 * 800:hdpi)

Nexus 1(3.7インチ、480 * 800:hdpi)

小-ldpi \ dimens.xml

以下のデバイスは、small-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 2016

はい、私はあなたに同意します。すべてのファイルに値を書き込むのではなく、「異なるテキストサイズに対して異なる値のフォルダーを作成する」と言いました。タイトルを読んでください。ありがとう。
koteswarao 2016

9

すべてを処理し、あなたの痛みを軽減する素晴らしいライブラリがあります。それを使用するには、gradleに2つの依存関係を追加するだけです。

 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)

画面サイズ間の比率はどこで入手できますか?私は、彼らがすべて定義されたツールで見ることができるようにldpimdpiやり方を
アミットパル

それはせいぜいそこから値を取得する値フォルダに依存します。
Piyush

values-xxhdpiNexus 6 について言及する必要がありますか?
Amit Pal

はい、あなたはする必要があります!
Piyush、2015年

320x480典型的なmdpiです。だから、のいずれかでそれを置くvaluesかでvalues-mdpi
Phantômaxx

6

入れdimens.xmlてもいい

1)

2)values-hdpi

3)values-xhdpi

4)values-xxhdpi

そして、dimens.xml密度に応じて、対応するフォルダー内で異なるサイズを指定します。


2
Androidのドキュメントによると、small / normal / largeは非推奨です。
Benjamin Mesing 2017

1

ケースであなたはもっと見たい:ここだリンクを含む、デバイス(タブレット、携帯電話、時計)のリストについてはwatchchromebookwindowsmac。ここでは密度、寸法などを見つけることができます。これに基づいて、エミュレーターを使用する場合にも優れたリソースです。

特定のアイテムをクリックすると、右側に詳細が表示されます。 サンプル

なのでAndroid、関連して投稿します。 サンプル1

サンプル2

〜Webのコピーを保存することをお勧めします。オフラインで表示するには。


1

Android 3.2では、画面サイズに対する新しいアプローチが導入されています。画面サイズを表す数値はすべて「dp」単位です。ほとんどの場合、

最小幅dp:「dp」単位でのアプリケーションレイアウトに使用可能な最小幅。これは、ディスプレイの回転で発生する最小の幅dpです。

res >>> new >>> Androidリソースディレクトリを右クリックして作成します。

使用可能な修飾子」ウィンドウから、「最小画面幅」を「選択された修飾子」に移動します

スクリーン幅ウィンドウちょうどそのdimensを使用するには、Androidメーカー希望あなたから始まる「DP」の値を書き込みます。

プロジェクトビューに変更するより、新しく作成したリソースディレクトリを右クリックします。

new >>> Valuesリソースファイルに新しいファイル名dimens.xmlを入力すると、作業は完了です。


これらのフォルダを実際に作成する方法について説明していただきありがとうございます。
Beko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.