web-dev-qa-db-ja.com

アンドロイドですべての異なる画面サイズに対してdimens.xmlを定義する方法?

Androidでさまざまな画面サイズ(密度)をサポートする場合、多くの場合、考えられるすべての画面に対してさまざまなレイアウトを作成することに焦点が当てられています。 I.E.

  • ldpi
  • mDPI
  • hdpi
  • xhdpi
  • xxhdpi
  • xxxhdpi

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

私の知る限りでは、 this ツールを使用して他の画面サイズに適したdimens.xmlを見つけ、それを自分のプロジェクトに追加することができます。これは私の状況でそれを行うための正しい方法ですか?

もう1つの質問、上記の画面サイズにはdimens.xmlを作成するだけでいいのですか。もしそうなら、w820dpは何ですか?

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

108
Amit Pal

あなたは異なるスクリーンのための異なる値のフォルダを作成する必要があります。好き

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

編集済み@ humblerookie

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

234
IntelliJ Amiya

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

画面ごとに異なる値フォルダーを作成し、画面密度に基づいて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)

nexus 5(5.0 "、10801920年:xxhdpi)

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

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

ネクサス10(10.1 "、2560 * 1600:xhdpi)

大きい - xhdpi\dimens.xml

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

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

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

ネクサスワン(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)

24
koteswarao

Scalable DP を使用

異なるスクリーンサイズに対して異なるレイアウトを作成することは理論的には良い考えですが、 all スクリーンの寸法やピクセル密度に対応するのは非常に困難です。上記の回答で提案されているように20種類以上の異なるdimens.xmlファイルを持つことは、まったく管理するのが容易ではありません。

使い方:

sdpを使用するには:

  1. implementation 'com.intuit.sdp:sdp-Android:1.0.5'build.gradleに含める
  2. 50dpのようなdpの値を@dimen/50_sdpに置き換えます。

    <TextView
     Android:layout_width="@dimen/_50sdp"
     Android:layout_height="@dimen/_50sdp"
     Android:text="Hello World!" />
    

仕組み:

sdpは、画面サイズに合わせて拡大縮小されます。これは、基本的にはすべてのdp値に対して、異なるdimens.xmlの巨大なリストだからです。

enter image description here

実際に見る:

ここでは、大きく異なる画面サイズと密度を持つ3つのデバイス上にあります。

enter image description here

sdpサイズの単位計算には、パフォーマンス上の制約およびユーザビリティ上の制約から、いくつかの近似が含まれています。

22
Advait S

プロジェクトの場所と入力として必要なディメンションファイルを取得する簡単な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
Akeshwar Jha

画面ごとに異なる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)
6
Piyush

あなたはdimens.xml

1)

2)値 - hdpi

3)値 - xhdpi

4)値-xxhdpi

また、密度に応じて、対応するフォルダー内のdimens.xmlのサイズを変えてください。

4
Anoop M

すべてを処理して痛みを軽減するNiceライブラリがあります。それを使うために、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"
1
Shivam Yadav

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

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

Androidなので、私はそれに関連して投稿します。 sample1

sample2

〜ウェブのコピーを保存した方が良いです。オフラインで表示する.

1
RoCk Vangeance

Android 3.2では、画面サイズに対する新しいアプローチが導入されました。画面サイズを表す数字はすべて「dp」単位です。主に使用することができます。

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

res >>> new >>> Androidリソースディレクトリ

使用可能な修飾子ウィンドウ移動最小画面幅から選択した修飾子

画面の幅 windowに、あなたから始めて "dp"値を書くだけで、Android Studioにその寸法を使用させたいです。

Project viewに変更するよりも、新しく作成したリソースディレクトリを右クリックします。

new >>> 値リソースファイル新しいファイル名を入力してくださいdimens.xmlそしてあなた完了です。

0
Levon Petrosyan