Android
さまざまな解像度、サイズで画面をサポート
サーチ…
備考
用語と概念
画面サイズ
スクリーンの対角線として測定された実際の物理的なサイズ。簡単にするため、Androidはすべての実際の画面サイズを4つの一般化されたサイズ(小、標準、大、超)にグループ化します。
スクリーン密度
画面の物理領域内のピクセル数。通常はdpi(dots per inch)と呼ばれます。例えば、「低」濃度スクリーンは、「通常」または「高」濃度スクリーンと比較して、所与の物理的エリア内のピクセル数がより少ない。簡単にするために、Androidはすべての実際の画面密度を低、中、高、超高、超超高、超超超高の6つの一般化された密度にグループ化します。
オリエンテーション
ユーザーの視点から見た画面の向き。これは横長または縦長のいずれかです。つまり、画面のアスペクト比はそれぞれワイドまたは高です。異なるデバイスがデフォルトで異なる方向で動作するだけでなく、ユーザーがデバイスを回転させるときに実行時に向きが変わる可能性があることに注意してください。解像度画面上の物理ピクセルの合計数。複数の画面のサポートを追加する場合、アプリケーションは解像度で直接動作しません。アプリケーションは、一般的なサイズと密度のグループで指定されているように、画面のサイズと密度にのみ関係する必要があります。密度非依存ピクセル(dp)UIレイアウトを定義するときに使用する仮想ピクセル単位で、レイアウトの寸法や密度に依存しない方法で位置を表す。密度に依存しないピクセルは、160dpiの画面上の1つの物理ピクセルに相当します。これは、「中」の密度の画面でシステムが想定しているベースラインの密度です。実行時に、システムは使用中の画面の実際の密度に基づいて、必要に応じてdpユニットのスケーリングを透過的に処理します。 dp単位の画面ピクセルへの変換は簡単です:px = dp *(dpi / 160)。例えば、240dpiのスクリーンでは、1dpは1.5物理ピクセルに等しい。アプリケーションのUIを定義するときには、dp単位を常に使用して、異なる密度の画面にUIが正しく表示されるようにする必要があります。
単位
px
ピクセル - 画面上の実際のピクセルに対応します。
に
インチ - 画面の物理的なサイズに基づいています。 1インチ= 2.54センチメートル
mm
ミリメートル - 画面の物理的なサイズに基づいています。
pt
ポイント - スクリーンの物理的なサイズに基づいて1/72インチ。
dpまたはdip
Density-Independent Pixels - 画面の物理密度に基づく抽象的な単位。これらの単位は160 dpiの画面を基準にしているため、1 dpは160 dpiの画面上の1ピクセルです。 dpとピクセルの比率は画面の密度に応じて変化しますが、必ずしも正比例ではありません。注意:コンパイラは "dip"と "dp"の両方を受け入れますが、 "dp"は "sp"と一貫しています。
sp
縮尺に左右されないピクセル - これはdp単位と似ていますが、ユーザーのフォントサイズの優先順位によっても調整されます。フォントサイズを指定するときは、本機を使用することをお勧めします。そのため、画面の密度とユーザーの好みの両方で調整されます。 Androidの密度の独立性から:
単位 | 説明 | 物理的インチ当たりの単位 | 密度独立 | すべての画面で同じ物理サイズ |
---|---|---|---|---|
px | ピクセル | 不定 | いいえ | いいえ |
に | インチ | 1 | はい | はい |
mm | ミリメートル | 25.4 | はい | はい |
pt | ポイント | 72 | はい | はい |
dp | 密度独立ピクセル | 〜160 | はい | いいえ |
sp | スケール独立ピクセル | 〜160 | はい | いいえ |
参考文献:
構成修飾子の使用
Androidでは、現在のデバイス画面の特性に基づいてシステムが代替リソースを選択する方法を制御できるように、いくつかの設定修飾子がサポートされています。設定修飾子は、Androidプロジェクトのリソースディレクトリに追加できる文字列で、内部のリソースが設計されている設定を指定します。
構成修飾子を使用するには、次のようにします。
- プロジェクトのres /ディレクトリに新しいディレクトリを作成し、
<resources_name>-<qualifier>
形式で名前を付けます。<resources_name>
は、標準リソース名(drawableやlayoutなど)です。 -
<qualifier>
は構成修飾子で、これらのリソースが使用される画面構成(hdpiまたはxlargeなど)を指定します。
たとえば、次のアプリケーションリソースディレクトリは、さまざまな画面サイズと異なる描画可能なレイアウト設計を提供します。ランチャーアイコンには、 mipmap/
フォルダーを使用します。
res/layout/my_layout.xml // layout for normal screen size ("default")
res/layout-large/my_layout.xml // layout for large screen size
res/layout-xlarge/my_layout.xml // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml // layout for extra-large in landscape orientation
res/drawable-mdpi/graphic.png // bitmap for medium-density
res/drawable-hdpi/graphic.png // bitmap for high-density
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density
res/mipmap-mdpi/my_icon.png // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png // launcher icon for extra-extra-extra-high-density
dpとspをピクセルに変換する
Paint.setTextSize
などのピクセル値を設定する必要がある場合でも、デバイスに基づいてスケーリングする必要がある場合は、dp値とsp値を変換できます。
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 12f, metrics);
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 12f, metrics);
また、リソースをロードするコンテキストがある場合は、ディメンションリソースをピクセルに変換することもできます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="size_in_sp">12sp</dimen>
<dimen name="size_in_dp">12dp</dimen>
</resources>
// Get the exact dimension specified by the resource
float pixels = context.getResources().getDimension(R.dimen.size_in_sp);
float pixels = context.getResources().getDimension(R.dimen.size_in_dp);
// Get the dimension specified by the resource for use as a size.
// The value is rounded down to the nearest integer but is at least 1px.
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelSize(R.dimen.size_in_dp);
// Get the dimension specified by the resource for use as an offset.
// The value is rounded down to the nearest integer and can be 0px.
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_sp);
int pixels = context.getResources().getDimensionPixelOffset(R.dimen.size_in_dp);
テキストサイズと異なるAndroid画面サイズ
場合によっては、3つのオプションしか持たない方がよい場合もあります
style="@android:style/TextAppearance.Small"
style="@android:style/TextAppearance.Medium"
style="@android:style/TextAppearance.Large"
通常の画面サイズと区別するために、小さいものと大きいものを使用します。
<TextView
android:id="@+id/TextViewTopBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/TextAppearance.Small"/>
通常の場合、何も指定する必要はありません。
<TextView
android:id="@+id/TextViewTopBarTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
これを使用すると、さまざまな画面サイズのディメンションをテストして指定することを避けることができます。