異なる解像度はアンドロイドをサポートします


80

編集された質問:

モバイル解像度:
次の解像度のように異なる画面dpiを設計したいと思います。
320×480、
480×800、
540x960、
720x1280(サムスンS3)、
1080x1920(S4、Nexus5、ネクサス5X、モトG4)、
2560 X 1440(ネクサス6、ネクサス6P、サムスンエッジ)

タブレット解像度:
480X800(マイクロマックス)、
600x1024( samsung tab2)、
800x1280(ネクサス7)、
1200x1920(新しいネクサス7)、
2048x1536(ネクサス9)

デバイスのディスプレイ解像度に応じて異なるフォントサイズを使用したい。

Q1)これbestを解決する方法は何problemですか?

Q2)スローコーディングまたはXMLを実行するための最良のオプションは何ですか?

Q3)どのドローアブルフォルダがどのデバイス解像度を表していますか?

Q4)異なる解像度のアプリケーションランチャーアイコンサイズ?


16
画面の解像度は関係ありません。画面密度が重要です。
CommonsWare 2013年

2
[このSO回答] [1]を見て、コードを試してみてください。[1]:stackoverflow.com/questions/9877946/...
JJ86

些細な編集で質問をぶつけるのはやめてください。これが続く場合は、質問をロックします。
BradLarson

2
@Sotti:画面サイズ!=画面解像度。
CommonsWare 2014

1
@Sotti:私のコメントを読むと、画面の解像度は重要ではないと書いたことがわかります。画面サイズは関係ないということは書きませんでした。
CommonsWare 2014

回答:


189

さまざまな解像度のアプリランチャーアイコンのサイズ(ピクセル単位)

モバイル解像度

  • mipmap-mdpi(48X48)
  • mipmap-hdpi(72X72)
  • mipmap-xhdpi(96X96)
  • mipmap-xxhdpi(144X144)
  • mipmap-xxxhdpi(192X192)

タブレットのレイアウト:

タブレット固有のレイアウトが必要な場合は、次のフォルダを使用してください。

layout-large-mdpi   (1024x600)
layout-large-tvdpi  (800x1280)
layout-large-xhdpi  (1200x1920)
layout-xlarge-mdpi  (1280x800)
layout-xlarge-xhdpi (2560x1600)

Drawablesフォルダー:

  1. モバイル

    res/drawable        (default)
    res/drawable-ldpi/  (240x320 and nearer resolution)
    res/drawable-mdpi/  (320x480 and nearer resolution)
    res/drawable-hdpi/  (480x800, 540x960 and nearer resolution)
    res/drawable-xhdpi/  (720x1280 - Samsung S3, Micromax Canvas HD etc)
    res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc)
    res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge).
    
  2. タブレットの解像度: ここに画像の説明を入力してください

    フォントサイズ:

注:次のtextSizeように対処するときは常にSPを使用するようにしてくださいtextsize=12sp

  1. 事前定義を使用textAppearance

    デバイスの密度に応じてテキストサイズが自動的に設定されます。

    <TextView android:textAppearance="?android:attr/textAppearanceSmall"/>
    <TextView android:textAppearance="?android:attr/textAppearanceMedium"/>
    <TextView android:textAppearance="?android:attr/textAppearanceLarge" />
    

    使用例:

    <TextView
        style="@android:style/TextAppearance.Small"
        android:text="Sample Text - Small" />
    <TextView
        style="@android:style/TextAppearance.Medium"
        android:text="Sample Text  - Medium" />
    <TextView
        style="@android:style/TextAppearance.Large"
        android:text="Sample Text  - Large" />
    
  2. dimension.xml各デバイスでの使用:

    Google IO Pdfから、以下の構造がわかります。

    1. モバイル:

      res/values/dimens.xml(default)
      res/values-ldpi/dimens.xml   (240x320 and nearer resolution)
      res/values-mdpi/dimens.xml   (320x480 and nearer resolution)
      res/values-hdpi/dimens.xml   (480x800, 540x960 and nearer resolution)
      res/values-xhdpi/dimens.xml  (720x1280 - Samsung S3, Micromax Canvas HD, etc)
      res/values-xxhdpi/dimens.xml (1080x1920 - Samsung S4, HTC one, etc)
      

      res / values-xxxhdpi / dimens.xml(1440X2560-Nexus 6、Samsung S6edge)。

    2. タブレット:

      タブレットのために次のような、より具体的なフォルダを使用することができvalues-xlargevalues-large

      res/values-large/dimens.xml      (480x800)
      res/values-large-mdpi/dimens.xml (600x1024)
      

      または

      res/values-sw600dp/dimens.xml      (600x1024)
      res/values-sw720dp/dimens.xml      (800x1280)
      res/values-xlarge-xhdpi/dimens.xml (2560x1600 - Nexus 10")
      res/values-large-xhdpi/dimens.xml  (1200x1920 - Nexus 7"(latest))
      

詳細については:

  1. 複数画面のサポートを参照してください。

  2. デザインデバイス密度については、Google IO Pdfのページ#77を参照してください。その中で、さまざまな異なるデバイスを処理する方法が見つかります。dimens.xml

  3. 以下のためにあなたのアプリの準備をするネクサス6とNexus 9の

複数の画面のサポートからの抜粋:

密度に依存しないピクセルは、160 dpi画面の1つの物理ピクセルに相当します。これは、「中」密度画面のシステムで想定されるベースライン密度です。実行時に、システムは、使用中の画面の実際の密度に基づいて、必要に応じてdpユニットのスケーリングを透過的に処理します。dp単位から画面ピクセルへの変換は簡単ですpx = dp * (dpi / 160)。たとえば、240 dpiの画面では、1dpは1.5物理ピクセルに相当します。アプリケーションのUIを定義するときは、密度の異なる画面でUIが適切に表示されるように、常にdp単位を使用する必要があります。


3
では、コードを実装する必要は本当にありませんか?寸法を作成するだけで、アプリは適用する調光を自動的にチェックしますか?
ジョンR

1
+1:レイアウトを使用してすべてのデバイスをサポートできることを忘れないでください。
S.M_Emamian 2014

1
@ S.M_Emamianタブレットの場合:1024X600(layout-large-mdpi)800X1280(layout-large-tvdpi)1200X1920(layout-large-xhdpi)1280X800(layout-xlarge-mdpi)2560X1600(layout-xlarge-xhdpi)チェックインしてくださいシミュレータではなくデバイス。
Bhavesh Jethani 2014

2
以下のリンクもチェックしてください。stackoverflow.com/questions/14151121/...
Bhavesh Jethani


28

まず、画面ごとに異なる値フォルダーを作成し、画面に応じたサイズをres->values->dimens.xmlファイルに入れ、を使用して単純なフォントサイズを呼び出します"@dimen/text_size"

res/values/dimens.xml    
res/values-small/dimens.xml    
res/values-normal/dimens.xml    
res/values-xlarge/dimens.xml

//for small    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">15sp</dimen>
</resources>

//for normal    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">20sp</dimen>
</resources>

//for large    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">30sp</dimen>
</resources>

//for xlarge    
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">40sp</dimen>
</resources>

TextView以下のようにフォントサイズを取得します。

<TextView
    android:id="@+id/lblHeader"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"           
    android:textSize="@dimen/text_size"
    android:textStyle="bold"
    android:typeface="serif" />

では、ここで差分レイアウトの寸法をどのように指定したのでしょうか?たとえば、任意の比率(1:1.5:2:3:4)-(mdpi-hdpi:xhdpi:xxhdpi:xxxhdpi)-(2sp:3sp:4sp:6sp: 8sp)このように?私は混乱しています..!
Asif Sb

@AsifSb比率で指定する場合は、プログラムで設定する必要があります。それ以外の場合は、値フォルダー内のさまざまなdiemens.xmlに静的な方法でディメンションを配置する必要があります
PankajSharma 2015年

9

さまざまな画面解像度とさまざまな密度の問題を回避するために、画面の幅と高さのパーセンテージに基づいてすべてのサイズと位置を設定します。画面の幅または高さのパーセンテージに基づいてテキストのサイズを変更すると、フォントはすべてのデバイスとすべての解像度で正しいサイズになります。スペースの幅と高さに基づいて正しいフォントサイズを取得するには、次の関数を使用するだけです。

private float SetTextSize(String text, int width, int height)
{
    Paint paint = new Paint();
    float textWidth = paint.measureText(text);
    float textSize = (int) ((width / textWidth) * paint.getTextSize());
    paint.setTextSize(textSize);

    textWidth = paint.measureText(text);
    textSize = (int) ((width / textWidth) * paint.getTextSize());

    // Re-measure with font size near our desired result
    paint.setTextSize(textSize);

    // Check height constraints
    FontMetricsInt metrics = paint.getFontMetricsInt();
    float textHeight = metrics.descent - metrics.ascent;
    if (textHeight > height)
    {
        textSize = (int) (textSize * (height / textHeight));
        paint.setTextSize(textSize);
    }
    return textSize;
}

画面の幅と高さを取得するコードは次のとおりです。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2)
{
    Point size = new Point();
    getWindowManager().getDefaultDisplay().getSize(size);
    screenWidth = size.x;
    screenHeight = size.y; 
}
else
{
    Display display = getWindowManager().getDefaultDisplay(); 
    screenWidth = display.getWidth(); 
    screenHeight = display.getHeight(); 
}

必要なフォントサイズを取得するには、画面の幅と高さに基づいて領域を作成し、フォントサイズが適切になるまで調整します。正しく表示されると、すべてのデバイスで正しく表示されるはずです。

float textSize = SetTextSize("text", (int) (screenWidth * 0.1), (int) (screenHeight * 0.15));

これがお役に立てば幸いです


1
再「..画面の幅/高さのパーセンテージ」。注:この戦略は、アイテム数が固定されている画面に最適です。アイテムのスクロールリストを表示する画面では、大型の電話の場合、「より大きな」と「より多くの行を表示する」の間の妥協点を好みます。考えられる式は、すべてのフォントサイズにを掛けることですsqrt(phoneWidthInches / defaultWidthInches)。ここで、defaultWidthInchesは設計した元の電話のサイズです。したがって、2倍大きい電話は1.4倍大きいフォントになります。(代わりに、必要に応じて使用heightまたはdiagonal式を使用してください)。重要幅をピクセル単位で使用しないでくださいinches = pixels / dpi
toolmakerSteve 2018年

8

基本的に、次のようなテキストスタイルを作成する必要があります。

<style name="CodeFont">
    <item name="android:textSize">30sp</item>
</style>

詳細については、http://developer.android.com/guide/topics/ui/themes.htmlをご覧ください。

また、Androidのさまざまな画面のサポートガイドを使用して、次の説明に従って、適切な解像度のフォルダーにさまざまな画面に必要なさまざまなサイズを作成します。http//developer.android.com/guide/practices/screens_support.html

補足:どのような状況でそれを実行したいかはよくわかりません。フォントサイズにSPユニットを使用すると、さまざまな電話でほぼ同じサイズに見えるようにフォントが拡大縮小されます。


4

まず、1つの解像度のアプリケーション設計。

例:モバイル解像度380 * 480を想定します

       mobile screen width:380

       textView size is 80dp   
       Assume : if width is 380dp then 100 % then

               textview width 80dp then how many %(per).

            ower answer is: 25 %

belove式を使用してプログラムで画面サイズを見つける

    DisplayMetric  displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    ScreenHeight = displaymetrics.heightPixels;
    ScreenWidth = displaymetrics.widthPixels;
        txt_height = (int)((ScreenHeight*14.58)/100);
    txt_width = (int)((ScreenWidth*37.5)/100);


    LinearLayout.LayoutParams normal_param = new LinearLayout.LayoutParams(txt_height ,txt_width );

    txt_Name.setLayoutParams(normal_param);

さまざまなデバイスサイズのテキストサイズを指定したい。
Bhavesh Jethani 2013年

@BhaveshJethaniは、上記のコードを使用してテキストサイズのパーセンテージを計算します。コードが機能することを試してください。
hemantvc 2013年

3
私はフォントサイズについて話している..テキストビューサイズではない
Bhavesh Jethani 2013年

3

これは良い答えだと思います:

テキストサイズとさまざまなAndroid画面サイズ

しかし、ここでは、画面解像度でそれを行う方法を説明します。

次のような解像度ごとに「値」リソースディレクトリを作成できます。

values-wWIDTHp-hHEIGHTdp (you can also use values-wWIDTHp or values-hHEIGHTdp)
for example: 320*480 will be values-w320p-h480dp

各dir(デフォルト値dirを含む)に、次の内容の「dimens.xml」という名前のファイルを作成します。

 for exmaple (the value related to the resolution):
 <dimen name="def_font_size">10sp</dimen>

これで、「@ dimen / def_font_size」を使用するか、デフォルト値ディレクトリにスタイルを作成できます。

これを「styles.xml」に追加します。

<style name="FontSize">
    <item name="android:textSize">@dimen/def_font_size</item>
</style>

1

dpのサイズを画面サイズに応じたサイズに変換する関数を作成しましたが、うまく機能しています。画面に応じたテキストサイズに問題がある場合は、これを試してみてください。

public float convertFromDp(int input) {
    final float scale = getResources().getDisplayMetrics().density;
    return ((input - 0.5f) / scale);
}

単純に、以下のようにプログラムでテキストビューサイズに与えられた値を与えます

tvTextView1.setTextSize(convertFromDp(24));

この答えは私のために働いています。作業負荷と計算の削減
Ranjith Kumar

1

Nexus 6デバイスをサポートするには、drawable-560dpiフォルダーを作成し、その中にすべての画像を配置します。


そのような特定のレイアウトを作成する必要はなく、良いと思いますが、drawable-xxxhdpiはさらに簡単で便利です
Abhilash 2016

それはネクサス6のためではありません。560dpiの解像度を持つネクサス6だからです。560dpiフォルダーを宣言していない場合は、xxxhdpiフォルダーの画像を使用します。
Anand Savjani 2016

はい、簡単にするために、ネクサス6だけをピンポイントにしないでください。画像はそれほど変わらないので、xxxhdpiの方が簡単です。
Abhilash 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.