さまざまなデバイスでのAndroidアプリケーションの互換性について

Android上のデバイスの数が多く、ハードウェア、画面のサイズと品質、プロセッサー能力などが異なることは秘密ではありません。アプリケーションがどのデバイスで起動されるかを確実に知っているiPhoneプログラマーとは異なり、Android開発者は注意を払う必要がありますさまざまなデバイスとのアプリケーションの互換性。



この記事では、アプリケーションの互換性の問題に注意を払い、主に異なる対角線と解像度の画面にアプリケーションを表示します。



画像



最初に、画面を操作するためにAndroidが提供する可能性を理解する必要があります。



基本情報


画面サイズ画面の物理的なサイズ。 定義済みの値:小、通常、大、特大*。



幾何学的係数 (アスペクト比)-画面の物理的比率の比率(幅と高さ); 事前定義値:long(サイズが幅または高さの標準画面サイズを超える画面の場合)、notlong(標準サイズに対応する画面の場合)。



密度 -画面の物理サイズに対するピクセルの分布。 ピクセル密度値は重要です。これは、低密度画面のピクセルで表される同じUI要素が高密度画面の場合よりも大きく表示されるためです。 密度の事前定義値は、ldpi(低)、mdpi(中)、hdpi(高)、およびxhdpi *です。



独立 (密度非依存) ピクセル (密度非依存またはdp)は、アプリケーションがUI要素を描画するために使用できる「仮想」ピクセルです。 このピクセルは、160 dpiの密度の画面上の物理ピクセルに相当します。 実行時に、Android OSはピクセル= dp *(密度/ 160)の式に従って要素を描画します。ここで、密度は画面の密度です。



Android OSは、画面密度の値を介して画面解像度で動作することにも注意してください(開発者には解像度を操作する手段がありません)。



以下の図は、デバイスの密度と画面サイズの値が、これらの値の事前定義値とどのように相関するかを示しています。



画像



*注目に値するもう1つの点:xdpi密度値はAndroid 2.2(APIレベル8)で追加され、xlarge画面値はAndroid 2.3(APIレベル9)で追加されました



マニフェストとリソースの読み込みを操作する


Android 1.6以降、<support-screens>タグがマニフェストに追加されました。これは、アプリケーションを実行できるデバイスのクラスを決定するために使用されます。 smallScreens、normalScreens、largeScreens、xlargeScreensタグの属性は、上記で定義された画面値に対応し、trueまたはfalseです。 属性のデフォルト値は、使用するAndroidのバージョンによって異なります(詳細については、 こちらをご覧ください)。 属性値をtrueとして定義すると、OS Androidは、アプリケーションが対応する種類の画面と互換性があるという信号を受信し、互換性のための追加の手段を使用しません(falseの場合に発生すること) また、これらのツール(関数)は大きな画面サイズとの互換性のみで機能することにも注意してください(つまり、normalScreenがtrueで残りがfalseの場合、アプリケーションは大画面およびxlarge画面と互換性がありますが、小画面とは互換性がありません) 。 このタグは、アプリケーションをフィルタリングするためにAndroidマーケットでも使用されます。



密度には、anyDensityという属性もあります。これはtrue / false値も受け入れます。 属性値がtrueの場合、Android OSはさまざまな画面密度との互換性のために関数を使用しません。 この場合、アプリケーションはdpを使用してUI要素を描画するか、さまざまな密度のサイズの計算を個別に制御する必要があります。 値がfalseの場合、Android OSには画面密度に応じて要素をスケーリングする機能が含まれます。



リソース割り当て


Android OSは、特定の画面サイズと画面密度に使用されるリソースを決定するツールも提供します。 リソースは適切なフォルダーに配置されます。



res/layout/my_layout.xml // layout for normal screen size

res/layout-small/my_layout.xml // layout for small screen size

res/layout-large/my_layout.xml // layout for large screen size

res/layout-large-land/my_layout.xml // layout for large screen size in landscape mode

res/layout-xlarge/my_layout.xml // layout for extra large screen size



res/drawable-ldpi/my_icon.png // image for low density

res/drawable-mdpi/my_icon.png // image for medium density

res/drawable-hdpi/my_icon.png // image for high density



res/drawable-nodpi/composite.xml // density independent resource







画面互換性サポート


簡単に説明すると、サポートメカニズムは次の手順を使用して説明できます。

  1. OS Androidは、マニフェストからsupport-screensタグの属性値を取得します。
  2. 適切な画面サイズと密度のリソースがロードされます(これは、パラグラフ1で取得したデータに関係なく発生します)。
  3. パラグラフ1に従い、Android OSには互換性を確保するための機能が含まれています/含まれていません。
  4. 要素が描画されています。


互換性のあるアプリケーションを作成するための一般的なガイドライン




あとがき


この記事では、画面の特性が異なるデバイスでのアプリケーションのテストに関連する実際的な側面については説明していません。別の投稿でこれを強調するつもりです。



プライマリソース: developer.android.com



All Articles