page.title=互換性の維持 @jd:body

このレッスンでの学習内容

  1. 別のスタイルを定義する
  2. 別のレイアウトを提供する
  3. サポート ライブラリを使用する
  4. システム バージョンを確認する

関連ドキュメント

マテリアル テーマやカスタムのアクティビティ遷移など、マテリアル デザインの一部の機能は Android5.0(API レベル21)以降のみで利用できます。 ただし、マテリアル デザインをサポートし、以前のバージョンの Android を実行している端末と互換性がある端末でこれらの機能が実行されている場合は、機能を使用できるようにアプリを設計することが可能です。

別のスタイルを定義する

マテリアル テーマをサポートしている端末ではマテリアル テーマを使用するようにアプリを構成できますが、同時に次のようにして以前のバージョンの Android を実行する端末向けに以前のテーマに戻すことができます。

  1. res/values/styles.xml で、以前のテーマ(Holo など)から継承するテーマを定義します。
  2. res/values-v21/styles.xml で、マテリアル テーマから継承するテーマを上記と同じ名前で定義します。
  3. マニフェスト ファイルでこのテーマをアプリのテーマとして設定します。

注: この方法で別のテーマを用意せずマテリアル テーマだけを使う場合、そのアプリは 5.0 よりも前のバージョンの Android では実行できません。

別のレイアウトを提供する

マテリアル デザインのガイドラインに沿って設計したレイアウトでも、Android 5.0(API レベル 21)で導入された新しい XML 属性を一切使用していない場合は、以前のバージョンの Android でも問題なく表示されます。 新しい XML 属性を使用している場合は、別のレイアウトを用意できます。以前のバージョンの Android でアプリが表示される方法をカスタマイズする目的で別のレイアウトを用意することも可能です。

Android 5.0(API レベル 21)向けのレイアウト ファイルを res/layout-v21/ に作成し、以前のバージョンの Android 向けの別のレイアウト ファイルを res/layout/ に作成します。 たとえば、res/layout/my_activity.xmlres/layout-v21/my_activity.xml の代替レイアウトになります。

コードの重複を避けるには、res/values/ でスタイルを定義して res/values-v21/ で新しい API 用にスタイルを修正します。それからスタイル継承を用いて、基本スタイルを res/values/ で定義して、そのスタイルを res/values-v21/ で継承します。

サポート ライブラリを使用する

v7 サポート ライブラリ r21 以降には、次のマテリアル デザイン機能が含まれています。

システム ウィジェット

Theme.AppCompat テーマでは、次のウィジェット向けにマテリアル デザインのスタイルが提供されています。

カラーパレット

Android v7 サポート ライブラリでマテリアル デザインのスタイルを入手し、カラーパレットをカスタマイズするには、次のように Theme.AppCompat テーマのいずれかを適用します。

<!-- extend one of the Theme.AppCompat themes -->
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_green_A200</item>
</style>

リストとカード

{@link android.support.v7.widget.RecyclerView} ウィジェットや {@link android.support.v7.widget.CardView} ウィジェットは Android v7 サポート ライブラリを通じて以前のバージョンの Android でも使用できますが、次のような制限があります。

依存関係

5.0(API レベル 21)より前のバージョンの Android でこれらの機能を使用するには、Android v7 サポート ライブラリを Gradle 依存関係としてプロジェクトに含めます。

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.+'
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
}

システム バージョンを確認する

次の機能は、Android 5.0(API レベル 21)以降でのみ使用できます。

以前のバージョンの Android との互換性を維持するには、上記の機能に対する API を起動する前に、システム {@link android.os.Build.VERSION#SDK_INT version} を実行時に確認します。

// Check if we're running on Android 5.0 or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // Call some material design APIs here
} else {
    // Implement this feature without material design
}

注: アプリがサポートする Android のバージョンを指定するには、マニフェスト ファイルで android:minSdkVersion 属性と android:targetSdkVersion 属性を使用します。 Android 5.0 でマテリアル デザインの機能を使用するには、android:targetSdkVersion 属性を 21 に設定します。 詳細については、<uses-sdk> API ガイドをご覧ください。