web-dev-qa-db-ja.com

異なる解像度のサポートandroid

編集された質問:

モバイル解像度:
次の解像度のような異なる画面dpiを設計したいと思います。
320x480、
480×800、
540x960、
720x1280(Samsung S3)、
1080x1920(S4、Nexus5、Nexus 5x、Moto G4)、
2560 x 1440(Nexus 6、Nexus 6p、Samsung Edge)

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

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

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

Q2)スローコーディングまたはXMLを行う最適なオプションは何ですか

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

Q4)異なる解像度のApplication Launcherアイコンのサイズは?

78
Bhavesh Jethani

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

モバイル解像度

  • 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. タブレットの解像度: enter image description here

    フォントサイズ:

注:textsize=12spなどのtextSizeを扱うときは、常にSPを使用するようにしてください。

  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. アプリを準備する Nexus 6およびNexus 9

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

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

186
Bhavesh Jethani

最初に、さまざまな画面にさまざまな値のフォルダーを作成し、画面に応じたサイズを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" />
27
PankajSharma

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

<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/ practice/screens_support.html

補足:フォントサイズにSP単位を使用すると、さまざまな携帯電話でフォントが多少同じサイズに見えるようにスケーリングされます。

8
Raanan

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

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));

これがあなたのお役に立てば幸いです

8
Dan Bray

まず、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);
4
Hemantvc

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

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

しかし、ここではどのように画面解像度でそれを行うことができます:

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

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

各ディレクトリ(デフォルト値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>
3
naif.ult

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

1
Anand Savjani

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

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

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

tvTextView1.setTextSize(convertFromDp(24));
1
Furqan Ali