Androidでさまざまな画面サイズ(密度)をサポートする場合、多くの場合、考えられるすべての画面に対してさまざまなレイアウトを作成することに焦点が当てられています。 I.E.
参考としてxhdpi画面のレイアウトを設計し、dimens.xmlでdimensionsを定義しました。今私はすべての可能な画面サイズにそれをサポートしたいです。どうやってやるの?
私の知る限りでは、 this ツールを使用して他の画面サイズに適したdimens.xmlを見つけ、それを自分のプロジェクトに追加することができます。これは私の状況でそれを行うための正しい方法ですか?
もう1つの質問、上記の画面サイズにはdimens.xmlを作成するだけでいいのですか。もしそうなら、w820dp
は何ですか?
ご協力いただきありがとうございます。私は電話のみをサポートする必要があります(タブレットや他のデバイスではありません)。
あなたは異なるスクリーンのための異なる値のフォルダを作成する必要があります。好き
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
あなたがここに訪れるかもしれないより多くの情報のために
http://Android-developers.blogspot.in/2011/07/new-tools-for-managing-screen-sizes.html
編集済み@ humblerookie
Dimenify というAndroid Studioプラグインを使用して、カスタムスケールファクタに基づいて他のピクセルバケットの寸法値を自動生成できます。まだベータ版ですが、あなたが開発者に出くわした問題や提案があれば必ず通知してください。
必要なビューサイズの変化を異なる画面で確認したい。
画面ごとに異なる値フォルダーを作成し、画面密度に基づいてdimens.xmlファイルを配置する必要があります。
私は1つのTextViewを取り、私が異なる値のフォルダにある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を変更すると、以下のデバイスで画面のサイズを変更できます。
ネクサス9(8.9 "、2048 * 1556:xhdpi)
ネクサス10(10.1 "、2560 * 1600:xhdpi)
以下のデバイスは、大きいサイズを変更すると画面のサイズを変更できます - xhdpi\dimens.xml
ネクサス7(7.0 "、1200 * 1920:xhdpi)
nexus 7(2012)(7.0 "、800×1280:tvdpi)
以下のデバイスは、大きさを変更すると画面のサイズを変更できます - mdpi\dimens.xml
5.1インチWVGA(480×800:mdpi)
5.4インチFWVGA(480×854:mdpi)
7.0インチWSVGA(タブレット)(1024×600:mdpi)
以下のデバイスは、通常のサイズに変更すると画面サイズを変更できます - hdpi\dimens.xml
ネクサスs(4.0 "、480 * 800:hdpi)
ネクサスワン(3.7 "、480 * 800:hdpi)
以下のデバイスは、小さいものを変更すると画面のサイズを変更できます - ldpi\dimens.xml
2.7 "QVGAスライダー(240 * 320:ldpi)
2.7インチQVGA(240×320:ldpi)
以下のデバイスは、xlarge - mdpi\dimens.xmlを変更すると画面のサイズを変更できます。
10.1インチWXGA(tABLET)(1280×800:MDPI)
以下のデバイスは、通常のサイズを変更したときに画面サイズを変更できます - ldpi\dimens.xml
3.3インチWQVGA(240×400:LDPI)
3.4インチWQVGA(240×432:LDPI)
以下のデバイスは、通常のサイズに変更すると画面サイズを変更できます - hdpi\dimens.xml
4.0インチWVGA(480×800:hdpi)
3.7インチWVGA(480×800:hdpi)
3.7インチFWVGAスライダー(480 * 854:hdpi)
以下のデバイスは、通常のサイズを変更したときに画面のサイズを変更できます - mdpi\dimens.xml
3.2 "HVGAスライダー(ADP1)(320 * 480:MDPI)
3.2インチQVGA(ADP2)(320×480:MDPI)
異なるスクリーンサイズに対して異なるレイアウトを作成することは理論的には良い考えですが、 all スクリーンの寸法やピクセル密度に対応するのは非常に困難です。上記の回答で提案されているように20種類以上の異なるdimens.xml
ファイルを持つことは、まったく管理するのが容易ではありません。
使い方:
sdp
を使用するには:
implementation 'com.intuit.sdp:sdp-Android:1.0.5'
をbuild.gradle
に含める50dp
のようなdp
の値を@dimen/50_sdp
に置き換えます。
<TextView
Android:layout_width="@dimen/_50sdp"
Android:layout_height="@dimen/_50sdp"
Android:text="Hello World!" />
仕組み:
sdp
は、画面サイズに合わせて拡大縮小されます。これは、基本的にはすべてのdp
値に対して、異なるdimens.xml
の巨大なリストだからです。
実際に見る:
ここでは、大きく異なる画面サイズと密度を持つ3つのデバイス上にあります。
sdp
サイズの単位計算には、パフォーマンス上の制約およびユーザビリティ上の制約から、いくつかの近似が含まれています。
プロジェクトの場所と入力として必要なディメンションファイルを取得する簡単な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);
}
}
画面ごとに異なる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)
あなたはdimens.xml
を
1)値
2)値 - hdpi
3)値 - xhdpi
4)値-xxhdpi
また、密度に応じて、対応するフォルダー内のdimens.xml
のサイズを変えてください。
すべてを処理して痛みを軽減する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"
Android 3.2では、画面サイズに対する新しいアプローチが導入されました。画面サイズを表す数字はすべて「dp」単位です。主に使用することができます。
最小幅dp:「dp」単位のアプリケーションレイアウトに使用可能な最小幅。これは、ディスプレイを回転させたときに遭遇する最小の幅dpです。
res >>> new >>> Androidリソースディレクトリ
使用可能な修飾子ウィンドウ移動最小画面幅から選択した修飾子
画面の幅 windowに、あなたから始めて "dp"値を書くだけで、Android Studioにその寸法を使用させたいです。
Project viewに変更するよりも、新しく作成したリソースディレクトリを右クリックします。
new >>> 値リソースファイル新しいファイル名を入力してくださいdimens.xmlそしてあなた完了です。