「本記事は Developer Advocate の Katherine Kuan が 10 月 2 3 日に Android Developers blog に投稿した「Getting Your Apps Ready for Nexus 6 and Nexus 9」という記事を元に、翻訳・作成しています。詳しくは元記事をご覧ください。 - 荒木」

Nexus 6 で動作する Tumblr アプリ(マテリアル デザイン適応済み)
先週、Google は Nexus 6 と Nexus 9 を発表しました。Android 5.0 Lollipop を搭載して出荷される Nexus ファミリーの新しい仲間である両機種は、マテリアル デザインによる刷新されたビジュアルスタイルをはじめとし、より快適なパフォーマンスと追加機能によって純粋な Google 体験をお届けします。

ユーザーの方々に最良のモバイル体験をもたらすよう、みなさまのアプリやゲームを最適化しましょう。下記に、参考になる情報をいくつかまとめました。

Nexus 6

画面

Nexus 6 は見事な 5.96 インチのクワッド HD 画面をそなえ、解像度は 2560 x 1440 ピクセル(493 ppi)となります。これはつまり ~ 730 x 410 dp(density independent pixels または密度非依存ピクセル)ということになります。

素材を確認

本デバイスは量子化密度 560 dpi ですので、プライマリ密度バケットでいうところの xxhdpixxxhdpi の間に位置します。Nexus 6 では、xxxhdpi の素材があればそれをスケールダウン表示し、もしなければ xxhdpi の素材をスケールアップして表示します。

Launcher に大きなアプリアイコンを表示できるので、少なくとも xxxhdpi アプリアイコンを 1 つ用意してください。アプリアイコンはデバイスの現状の密度とは異なる解像度で使用されるため、drawable- フォルダではなく、mipmap- フォルダに入れることを推奨します。たとえば、xxhdpi デバイスで xxxhdpi アプリアイコンを使用することがあります。

res/
   mipmap-mdpi/
      ic_launcher.png
   mipmap-hdpi/
      ic_launcher.png
   mipmap-xhdpi/
      ic_launcher.png  
   mipmap-xxhdpi/
      ic_launcher.png
   mipmap-xxxhdpi/   
      ic_launcher.png  # Nexus 6 の launcher で使用されるアプリアイコン

xxxhdpi 版の素材を追加することで Nexus 6 において、よりシャープなビジュアル体験を提供することができます。しかし、apk のサイズが大きくなってしまうので、アプリごとに適切な判断が必要となります。
res/
   drawable-mdpi/
      ic_sunny.png
   drawable-hdpi/
      ic_sunny.png
   drawable-xhdpi/   
      ic_sunny.png
   drawable-xxhdpi/  # xxxhdpi 版がないときは、こちらを使用
      ic_sunny.png 
   drawable-xxxhdpi/ # Nexus 6 用の高解像度素材
      ic_sunny.png

Google Play でフィルターされていないことを確認

AndroidManifest.xml ファイルにて <compatible-screens> 要素は新しいデバイスが発売されるたびにアプリをリコンパイルして公開することに対応できないため、同要素を使用している場合、使用を中止してください。どうしても使用する必要がある場合には、マニフェストをアップデートして、これらのデバイスの構成(画面サイズと密度)を追加するようにしてください。この対応がされていないアプリは、当該デバイスでの Google Play の検索結果から除外されてしまう可能性があります。

Nexus 9

画面

Nexus 9 は 8.9 インチ画面をもつプレミアム タブレットです。画面の解像度は 2048 x 1536 ピクセル(288 ppi)で、これは 1024 x 768 dip に相当します。画面のアスペクト比は 4:3 であり、今までにリリースされたタブレットの画面とは異なります。Nexus 9 は密度バケットが xhdpi になるので、素材は既に drawable-xhdpi フォルダに入っているものと思います。
Nexus 9 で動作する Wall Street Journal アプリ(マテリアル デザイン適応済み)

64-bit 用に NDK アプリを有効化

Nexus 9 は 64 ビット デュアルコアプロセッサを搭載しているので、64 ビット ARM 命令セットを搭載して出荷される初めての Android デバイスということになります。64 ビットプロセッサのサポートは Android 5.0 で追加されたばかりなので、NDK アプリをお持ちであれば Application.mk ファイル内の APP_ABI 値をアップデートして有効化してください。

APP_ABI := armeabi armeabi-v7a arm64-v8a x86 x86_64 mips mips64

より詳細な情報はデベロッパーサイトにて公開されています。64 ビットに対応したアプリのテストは、Android 5.0 搭載の実機か、最近発表された Android Studio 内の 64 ビットエミュレーター でテストすることができます。

ハードウェア キーボードのサポートをアップデート

Nexus 9 の Keyboard Folio は、まもなくアクセサリとして Google Play に並びますが、アプリの画面オリエンテーションを 1 つに限定しないことは非常に重要になります。Nexus 9 のデフォルトのオリエンテーションは縦画面ですが、キーボードを使用するときは横画面での使用となります。アプリをデバイスのデフォルトのオリエンテーションに固定してしまうと、キーボードに対して横向きに表示されてしまうかもしれません。

Toolbar アクションや Button Bar の操作にはタッチ入力やキーボード ショートカットを使用しつつも、ユーザーはアプリ内の主要コンテンツにキーボードを使ってアクセスできるようにするべきです。そのためには、アプリの主要なアクションがキーボード ナビゲーションとショートカットに適切に対応するようにしてください。Ctrl + [ショートカット] の組み合わせで呼び出すキーボード ショートカットは、下記のようにメニュー アイテムを通じて定義できます。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_create"
        android:title="@string/menu_create"
        android:alphabeticShortcut="c” />
</menu/>

他にも Activity#onKeyShortcut または View#onKeyShortcut を使用して定義することもできます。キーボード アクションの詳細については、こちらを参照してください。
In MainActivity.java:

@Override
public boolean onKeyShortcut(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_R:
            Toast.makeText(this, "Reply", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onKeyShortcut(keyCode, event);
    }
}

w- と sw- qualifiers を用いた順応するデザイン

Nexus 6 と Nexus 9 の画面サイズを活用するために、画面オリエンテーションに順応するデザインは重要です。これまでのように縦画面よりも横画面のほうが画面幅を大いに広くとれると想定してアプリを作成した場合、Nexus 9 のような画面比率 4:3 のデバイス上で問題に遭遇するかもしれません。そこで layout-landlayout-port リソースフォルダ qualifier の代わりに、使用可能な画面幅に応じてコンテンツが配置される w<N>dp 幅リソースフォルダ qualifier を使用することを強くおすすめします。

コンテンツを考慮して、必要となる画面サイズの最小と最大を決めてください。そして、異なる画面幅にあわせて、レイアウト構成(グリッド カラムの数や、マルチペイン レイアウトなど)に変更を加えてください。
たとえば、シングルペイン レイアウトは下記のファイルにて定義できます。


res/layout/activity_main.xml

幅 600dp 以上の大きな画面の場合には、リストと詳細ペインをともなったレイアウトは下記のファイルにて定義できます。

res/layout-w600dp/activity_main.xml

幅 720dp 以上のさらに大きな画面の場合には、より広い横幅を必要とする詳細ペインをともなった、マルチペイン レイアウトを下記のファイルにて定義できます。

res/layout-w720dp/activity_main.xml

フォームファクタに基づく属性については、values-largevalues-xlarge リソースディレクトリで宣言せずに、sw<N>dp 最小幅 qualifier を使用してください。たとえば、スマートフォンにおいて TextView で中サイズのフォントを使用できます。

In res/values/styles.xml:

<style name="DescriptionTextStyle">
  <item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
</style>

また、デバイスの最小画面幅(縦横の画面幅の小さいほうの値)が 600dp 以上のときに TextViews に大きなサイズのフォントを使用する、といった設定が可能です。これにより、画面の大きなデバイスを回転させたときにフォントサイズが変わってしまうということを防げます。

In res/values-sw600dp/styles.xml:

<style name="DescriptionTextStyle">
  <item name="android:textAppearance">?android:attr/textAppearanceLarge</item>
</style> 

5.0 の機能とマテリアル デザイン

android:targetSdkVersion を「21」に設定してください。アプリが引き続き快適に動作するように、Android 5.0 Lollipop における重要な挙動の変更点(新しい Android ランタイム「ART」を含む)を確認してください。また、より充実した通知機能などの新しいプラットフォーム API を使用することもできます。

Nexus 6 と Nexus 9 のユーザーは新しいマテリアル デザインの世界に没入しつつ、これまでと変わらないスムーズな動作、美しく彩られたワクワクするようなディテールをあなたのアプリに期待することでしょう。開発者のみなさまが新しいデザイン言語にあわせてアプリをアップデートするにあたり、サポート ライブラリ動画スタートガイドなど、たくさんの資料を用意しました。みなさまのアプリを見るのを楽しみにしております。

Posted by 荒木佑一 Developer Relations Team