[この記事は Android プロダクト マネージャーの Jamal Eason ã«ã‚ˆã‚‹ Android Developers Blog の記事 "Android 5.1 Lollipop SDK" を元に、荒木が翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google は昨日、Android Lollipop プラットフォームのアップデート版である Android 5.1 を公開しました。Android 5.1 では安定性が増し、さらに使いやすい通知機能やパフォーマンスの改善が盛り込まれています。この Lollipop アップデートの一環として、Android 5.1 をサポートし、開発やテストを行うことができる Android 5.1 SDK (API レベル 22)もリリースしています。

Android 5.1 の新機能

Android 5.1 では、開発者向けの新しい API がいくつか導入されています。今回追加される主要な API では、複数の SIM カードをサポートしています。これは Android One 搭載端末が流通している多くの地域でとても重要です。これによって Android One 搭載端末のユーザーは複数の携帯キャリアをより自由に変更できるようになり、用途や地域に合わせて最適な方法でネットワーク通信を管理できるようになります。開発者はこの機能を活用して、アプリの機能を拡張できます。
一般ユーザー向けの新しい機能に加えて、Android 5.1 では Android for Work のサポートをさらに充実させることで企業向けの機能も強化しています。

Android 5.1 は Android One などの互換端末で複数の SIM カードをサポート

Android SDK のアップデート

Android 5.1 ではまず、新しいプラットフォームと 新しい API をサポートするよう、Android SDK ツールがアップデートされています。この SDK には Android 5.1 エミュレータのシステム イメージが含まれています。これによって最新の機能や API を使ってアプリを開発してテストできます。現在使用している SDK は Android Studio の Android SDK Manager を使ってアップデートできます。

開発者向けの新しい API の詳細については、API の概要をご覧ください。

Nexus 端末にも順次展開

今後数週間のうちに次の Nexus 端末に対して Android 5.1 アップデートを展開していきます。Nexus 4、Nexus 5、Nexus 6、Nexus 7 (2012)、Nexus 7 (2012、3G)、Nexus 7 (2013)、Nexus 7 (2013、3G/LTE)、Nexus 9、Nexus 9 (LTE)、Nexus 10、Nexus Player

次のステップ

すべての Android リリースの場合と同様に、できるだけ早く新しいプラットフォームでアプリをテストすることをお勧めします。この SDK に含まれる Android 5.1 システム イメージとエミュレータを使って、すぐにでも始められます。あるいは Android 5.1 の Nexus のイメージをダウンロードしてお手元の Nexus 端末にシステム イメージをフラッシュすることも可能です。
まだアプリをマテリアル デザインにアップデートできていない方、Android WearAndroid TVAndroid Auto でアプリがどのように動作するかまだ試していない方は、今回の Android 5.1 SDK アップデートですべてお試しいただけます。

Posted by Yuichi Araki - Developer Relations Team

Android Studio 1.0 のサンプル ウィザード


Android Studio 上に新たにインポートしたサンプル プロジェクト

上記の方法の他に、  デベロッパー向けサイトの  サンプル ブラウザ ã‹ã‚‰æŽ¢ã™æ–¹æ³•ã‚‚あります。それぞれのサンプルには、Overview(概要説明)、アプリのファイル構造を確認できる Project(プロジェクト)ページ、そのサンプルの zip ファイルを入手できる Download(ダウンロード)リンクが掲載されています。さらに別の方法として、SDK Manager にて Android 5.0(API 21)用の  SDK サンプル ã‚’ダウンロードして、既存のプロジェクトとしてご自分の IDE にインポートする方法もあります。

マテリアル デザイン

遷移アニメーションのサンプル
マテリアル デザインを採用する場合は、以下に挙げるマテリアル要素に特に重点を置いたサンプルコードが参考になるでしょう。
詳しくは、デザイン  チェックリスト、主要 API およびウィジェットのリストガイドラインのドキュメントを参照してください。

上記マテリアル デザイン要素の一部を実装したものを見るには、Google I/O アプリのソースコードを参照してください。

プラットフォーム

Lollipop  では、Android プラットフォーム史上、最大規模のアップデートを行っています。Overview 画面では、複数のタスクを  並んで表示されたドキュメントとして表現できます。高度な通知の導入には、こちらの  サンプル  コードを利用できます。このコードには、lockscreen と heads-up notification API の使い方が示されています。

さらに、新しく Camera API  を導入し、より高度な画像キャプチャ機能と処理能力を提供しています。これらのサンプルでは、カメラ プレビューを使って  写真を撮る方法動画の録画方法、リアルタイム HDR(ハイ ダイナミック レンジ)カメラ ビューファインダーの実装方法を詳しく説明しています。

このほかに、 Project Volta  では、新しい API とツールの提供を通して、アプリのバッテリー使用の効率化を支援しています。こちらの JobScheduler のサンプル  では、バックグラウンド タスクの実行を遅らせたり、特定の条件下で実行させるといったスケジュール設定の方法を説明しています。

エンタープライズ向けデバイス管理の使用事例に興味がある方向けには、  アプリの制限  を設定する方法、および ãƒžãƒãƒ¼ã‚¸ãƒ‰ プロフィールを作成する方法を説明したサンプル アプリがあります。

Android Wear

Android Wear に関しては、ウェアラブル端末の GPS サポートを活用する方法を示した  Speed Tracker のサンプルを用意しています。それ以外の  Android Wear のサンプルもご確認ください。以下に、データの同期、通知、ラウンド ディスプレイ対応など、ウェアラブル端末固有の機能を一部挙げておきます。

Android TV

 Leanback ライブラリ ã‚’使ってアプリを Android TV にも対応させる方法は、こちらの ãƒˆãƒ¬ãƒ¼ãƒ‹ãƒ³ã‚° ガイド  および ã‚µãƒ³ãƒ—ルで説明しています。

Android TV 向けに特化して最適化されたゲームを試してみたい場合は、Google Play から  Pie Noon  をダウンロードしてください。これは  Google で開発したインハウスのオープンソース ゲーム  で、Bluetooth コントローラーまたはモバイル端末のタッチ コントロールを使用する、マルチプレイヤーに対応したゲームです。

Android Auto

DevByte Introduction to Android Auto(Android Auto 入門) ã§å–り上げた使用事例について、2 つのコードサンプルを用意しました。Media Browser のサンプルDevByte)では、新たな Lollipop Media APIを使ってオーディオ アプリを Android Auto に簡単に対応させる方法を、また、 Messaging のサンプル  (DevByte)では、音声認識による返信をサポートした通知を実装する方法をそれぞれ説明しています。

Google Play 開発者サービス

以上、Android プラットフォームおよび各種フォームファクター用のサンプル リソースについて紹介してきましたが、Google Play 開発者サービス関連の既存のサンプルについてもひと言申し上げておきます。Google Play 開発者サービスでは、Maps、Google Fit、Google Cast など、最新の Google API をアプリ開発にご活用いただけます。Google Play 開発者サービス SDK のサンプルにアクセスするか、  デベロッパー向けサイトにある各 API の個別ページにアクセスしてください。ゲーム開発者向けには、成績、スコアボード、マルチプレイヤーサポートをゲームに追加する方法を示した  Google Play Games サービス  のサンプルをご用意しています。

※ なお、今回公開されたコードサンプルには、日本の Developer Relations チームの Developer Programs Engineer である Takeshi Hagikura ã¨ Yuichi Araki ã®ã‚³ãƒ¼ãƒ‰ã‚‚多数含まれています。Developer Relations チームでの仕事にご興味ある方はこちらの記事もご参照ください。


Posted by Ryosuke Matsuuchi - Developer Relations Team


Android でのメディア体験

ビデオの再生や録画、字幕の制御、外部ディスプレイの利用について解説します。


Android で作る没入型のメディア体験

MediaCodec の内部実装にまで踏み込んでメディア関連の低レベル API を解説します。


ExoPlayer: Android で適応的ビデオストリーミング

ExoPlayer はメディア プレーヤーを実装するための基板として利用できる API で、YouTube や Play Movies のアプリでも利用されています。


浮動小数点数オーディオの光と影

オーディオの内部表現が整数から浮動小数点数に変更されたことについての小話です。


サンプル レートとリサンプリング: なんでみんな仲良くできないの?

なぜ様々なサンプル レートが存在するのか疑問に思ったことはあるでしょうか。Android でのサンプル レートとリサンプリングについて紹介します。


あなたのアプリに地図を!

ストリート ビューやインドア マップなど、Google Maps Android API の新機能をご紹介します。


Android Auto の中身

Android Auto のアーキテクチャーについて解説します。


次世代の認証

Lollipop の新しい認証機能をご紹介します。


Android アプリ開発者のための分離

Android アプリで利用できるセキュリティー機能について解説します。


Google Play 開発者サービス 5.0

Google Play 開発者サービス 5.0 に関する紹介です。


パフォーマンス入門: CPU, GPU と Android ゲーム

ゲームのパフォーマンスを改善する上で役立つ CPU や GPU の動作の概念を紹介します。



Android Work

Lollipop では端末管理 API が大幅に強化されました。個人用アカウントと仕事用アカウントを端末内で完全に切り分け、仕事用アカウントに対してだけポリシーを適用するようなことができます。


Holo から Material へ

Holo テーマを利用した既存のアプリを Material テーマにアップデートする方法を解説しています。


アクティビティー間の遷移

KitKat で登場した Transition(遷移)フレームワークが、Lollipop ではアクティビティー間の遷移にも利用できるようになりました。


Android の JobScheduler を使う

電池消費節約プロジェクトの一環として登場した JobScheduler の解説です。


WebView の新機能

KitKat で Chromium ベースに刷新された WebView は Lollipop でも大きく進化しました。DevTools の強化を中心に解説しています。


Bluetooth Low Energy

低消費電力で利用できる Bluetooth 機能の解説です。


NFC のホスト カード エミュレーションでインタラクティブ体験

ホスト カード エミュレーションの機能は以前からありましたが、Lollipop では AID の動的な登録などがサポートされています。



マテリアル デザインはマルチスクリーンの世界にむけた、ビジュアル、インタラクション、モーションデザインの包括的なアプローチです。Android 5.0 Lollipop とアップデートされたサポート ライブラリは、マテリアル UI の作成をサポートします。以下にあなたのアプリに導入可能なウィジェットや API、そしてマテリアル デザインの主な要素について説明します。

タンジブル サーフェス

マテリアル デザインにおける UI は、デジタルの紙とインクでできています。サーフェスとそれが落とす影は、触れることができる範囲、触れたらどのように動くか、といったアプリケーションの構造を視覚的に表現しています。このデジタル化されたマテリアルは動いたり、拡張したり、変形したりすることで、柔軟な UI を形成します。

影の描写

サーフェスの位置と深度は、光のあたり具合や影に微妙な影響を与えます。新しい elevation プロパティを使用すれば、ビューの Z 軸における位置を指定できます。位置情報を元に、フレームワークはリアルタイムでそのビューよりも後ろにあるアイテムに影を落とします。レイアウト内で elevation の設定が行えます(単位: dip)。

<ImageView …
    android:elevation="8dp" />

また、ViewCompat の getElevation()/setElevation()(shim を利用)を使用して、コード上で設定することもできます。ビューが落とす影の形は基本的に背景の情報から算出されたアウトラインによって決まります。たとえば円形の drawable を floating action button の背景として設定していた場合、適切な形の影を落とすということです。ビューが落とす影の形をより詳細に制御したい場合は、getOutline() で Outline をカスタマイズできる ViewOutlineProvider を設定することができます。

カード

カードは、特定の情報を持ったサーフェスを作成する一般的なパターンです。CardView サポート ライブラリがアウトラインと影を提供するので、カードの作成は簡単です(旧来のプラットフォームでも同様の挙動です)。

<android.support.v7.widget.CardView
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
   <!--カードのコンテンツ -->
</android.support.v7.widget.CardView>

カードの見た目をプラットフォームをまたいで統一するために、CardView は FrameLayout を拡張しており、elevation と角の丸みの半径のデフォルト値を設定します。これらは必要に応じて cardElevation と cardCornerRadius の属性を更新することでカスタマイズできます。UI に奥行きをもたせる方法はカードだけではないので、カードばかり使いすぎないように気をつけましょう!

印刷物のようなデザイン

コンテンツが主役になるよう、マテリアル デザインは印刷物のデザインの原則にのっとり、すっきりとしたシンプルなレイアウトを実現します。大胆かつ考えぬかれた色の選択、意図的な余白、良質なタイポグラフィと、しっかりとしたベースライングリッドによって階層、意義、焦点が生み出されます。

タイポグラフィ

Android 5.0 ではシステム フォント Roboto がアップデートされ、画面サイズにこだわらずテキストを美しく、クリアに表示します。ミディアムウェイトが追加され(android:fontFamily="sans-serif-medium")、新しい TextAppearance スタイルは推奨されているタイポグラフィ スケールにのっとり、読みやすさとコンテンツの密度のバランスをとります。たとえば、android:textAppearance="@android:style/TextAppearance.Material.Title" と設定するだけで 「Title」のスタイルを適用できます。これらのスタイルは AppCompat サポート ライブラリを通じて、旧来のプラットフォームでも使用できます(“@style/TextAppearance.AppCompat.Title” など)

カラー



アプリのカラーパレットはブランディングや個性をもたらす要素です。下記のようなテーマ属性を用いて UI のコントロール要素を簡単に色付けできるようにしました。
  • colorPrimary: アプリのプライマリ色です。Action Bar の背景、最近のタスクのタイトル、エッジ効果などに使われます
  • colorAccent: プライマリ色を補足する明るい色です。EditText や Switch などのフレームワーク コントロールに使われます
  • colorPrimaryDark: プライマリ色の暗いバリエーションです。Status Bar に使われます
コントロール要素の色付けをよりきめ細かく行うには下記の属性を参照してください: colorControlNormal、colorControlActivated、colorControlHighlight、colorButtonNormal、colorSwitchThumbNormal、colorEdgeEffect、statusBarColor、navigationBarColor

AppCompat は上記の機能の多くを提供し、Lollipop 搭載前のプラットフォームでもコントロール要素の色付けを可能にします。

ダイナミックカラー

マテリアル デザインでは画像にあわせて色を流動的に使い分けることを推奨しています。特に色彩豊かな画像を採用している場合に有効です。新しいパレット サポート ライブラリは、画像からいくつかの色を抽出して UI コントロール要素のスタイルを抽出した色に合わせることを可能にし、ユーザーは没入感を得ることができます。抽出されたパレットには、明るい色、抑えた色、読みやすさを考慮したテキスト色が含まれます。

Palette.generateAsync(bitmap,
        new Palette.PaletteAsyncListener() {
    @Override
    public void onGenerated(Palette palette) {
         Palette.Swatch vibrant =
                 palette.getVibrantSwatch();
          if (swatch != null) {
              // 明るい色があるときは
              // タイトルの TextView を更新する
              titleView.setBackgroundColor(
                  vibrant.getRgb());
              titleView.setTextColor(
                  vibrant.getTitleTextColor());
          }
    }
});

リアリティのある動き

タンジブル サーフェスは映画の場面切り替えのように突然どこからともなく現れるものではなく、継続性を保ちます。その動きはユーザーの注意を促し、空間的な関係性を構築します。マテリアルはユーザーのタッチに反応し、もたらされる変化はタッチされた箇所を起点として広がります。ユーザーが理解しやすいように、すべての動きはなじみがあり意味あるものになっています。

Activity と Fragment の遷移


2 つの画面で共通する 「shared elements」(共有要素) を宣言することで、異なる状態への遷移をスムーズに行うことができます。

album_grid.xml
…
    <Imageview 
      …
     android:transitionname="@string/transition_album_cover" />
album_details.xml
…
    <Imageview
      …
      android:transitionname="@string/transition_album_cover" />

AlbumActivity.java
Intent intent = new Intent();
String transitionName = getString(R.string.transition_album_cover);
…
ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
    albumCoverImageView,   // 遷移がはじまるビュー
    transitionName    // 遷移先のビューの transitionName
    );
ActivityCompat.startActivity(activity, intent, options.toBundle());

ここでは2つの画面で同じ transitionName を定義します。新しい Activity が開始されると、この遷移は自動的に処理されます。また、要素を共有する以外にも、遷移開始時と終了時の演出を行うことが可能です。

リップル効果


マテリアルは ink ripple surface reaction でユーザーのタッチに反応します。Theme.Material を使用するか継承する場合、Button などのコントロールはデフォルトで ink ripple の反応をみせます(?android:selectableItemBackground も同様です)。drawable にリップル効果を追加するには、下記のようにRipple 要素を設定します。

<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/accent_dark">
    <item>
        <shape android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

タッチポイントからリップル効果がはじまるよう、カスタムビューでは View#drawableHotspotChanged コールバックにて、drawable にタッチ位置を伝える必要があります。

StateListAnimator

また、マテリアルは磁石がユーザーの指に吸いつくように持ち上がります。このような効果を実現するためには、translationZ 属性を活用します。これは elevation と似ていますが、一時的な効果をもたらすために利用します(Z = elevation + translationZ というように)。新しい stateListAnimator 属性を活用すれば、ユーザーのタッチに反応して translationZ を簡単に調整することが可能です(Buttons はデフォルトでこのように動作します)。

layout/your_layout.xml
<Imagebutton ...
    android:statelistanimator="@anim/raise" />
anim/raise.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:state_pressed="true">
        <objectAnimator
         android:duration="@android:integer/config_shortAnimTime" 
         android:propertyname="translationZ" 
         android:valueto="@dimen/touch_raise" 
         android:valuetype="floatType" />
    </item>
    <item>
        <objectAnimator 
         android:duration="@android:integer/config_shortAnimTime" 
         android:propertyname="translationZ" 
         android:valueto="0dp" 
         android:valuetype="floatType" />
    </item>
</selector>

Reveal

新しいコンテンツを表示させる際、マテリアル デザインの特徴を生かした遷移方法の 1 つが、拡大する円形マスクを利用したものです。この方法は、タッチした位置から外に向かって放射状に広がるので、ユーザーのタッチポイントがすべてのトランジションの始点であることを補強しています。これを実現するためには次の Animator を使用します。

Animator reveal = ViewAnimationUtils.createCircularReveal(
                    viewToReveal, // Reveal するための新しいビュー
                    centerX,      // マスク中心の x 座標
                    centerY,      // マスク中心の y 座標
                    startRadius,  // 開始時のマスクの半径
                    endRadius);   // 完了時のマスクの半径
reveal.start();

Interpolator

モーションは計算しつくされ、俊敏で正確であるべきです。ゆっくりと始まり、ゆっくりと終わる典型的な遷移とは異なり、マテリアル デザインにおけるオブジェクトは素早く動き始め、ゆっくりと最終位置につきます。オブジェクトは遷移動作時間のうち、より長い時間、最終位置付近に存在します。結果としてユーザーは遷移動作が終わるのを待つ必要がなくなり、モーション化によるマイナス効果は最小限に抑えられます。このような動作を可能にするのは、新しく追加された fast-in-slow-out interpolatorです。

要素が画面を出たり入ったりする場合、ピーク速度で行うのが好ましいですが、要素が画面外に出る際には fast-out-linear-in interpolator を、画面内に入る際には linear-out-slow-in interpolator を参考にしてください。

適応性の高いデザイン

マテリアル デザインにおける最終的な核となるコンセプトは、時計から大型テレビまでのさまざまな形・大きさのデバイスに適応するデザインを作ることです。このデザインのテクニックによって、それぞれのデバイスが共通のシステムを異なるビューで具現化するというビジョンの実現が可能になりました。各デバイスの画面の大きさや操作方法に適応するように各ビューを調整する一方で、色、アイコン、階層構造、各要素の空間的関係性には統一感をもたせます。マテリアル デザイン システムは、拡張可能なデザインを作成するのに役立つ柔軟なコンポーネントとパターンを提供します。

Toolbar

Toolbar は Action Bar を一般化させたもので、同様の機能を備えつつ、より高い柔軟性を提供します。通常の Action Bar と異なる点は、Toolbar は階層内のビューの 1 つであるということです。そのため、Toolbar のインスタンスは好きなところに配置することができ、他のビューと共存します。さらに、動きを与えたり、スクロール イベントに反応させたりもできます。Activity.setActionBar() をコールすることで、Toolbar を Activity の Action Bar として機能させることもできます。

上記の例では、青い Toolbar は高さが拡張され、コンテンツがオーバーレイしており、ナビゲーションボタンを提供しています。また、リスト部分と詳細ビューには、さらに 2 つの toolbar が使われていることにも注目してください。

Toolbar の導入については、こちらの記事を参照してください。

マテリアル化を進めましょう

マテリアル デザインは理解しやすく、美しく、適応性の高い、モーションにあふれたアプリを作ることを支援します。この記事が、みなさまがこれらの原則をアプリに適用されるきっかけとなり、その実現のために新しい API と互換用の API を活用するための手がかりとなることを願っております。

Posted by è’木佑一 Developer Relations Team

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-land や layout-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-large や values-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
Share on Twitter Share on Facebook



米国時間の 10 月 17 日に Android 5.0 SDK がリリースされました。新しい UI ウィジェットや、デザイン性にこだわったビジュアル言語であるマテリアル デザインを含んでいます。過去バージョンを搭載した Android デバイスにも最新のデザインを提供できるよう、AppCompat の大型アップデート、および新たなライブラリ(RecyclerViewCardViewPalette)の追加を行い、ライブラリを拡張しました。

本記事では AppCompat の新しくなった点と、アプリ開発においてマテリアル デザインを取り入れる方法について見ていきます。

AppCompat に新たに追加された機能

AppCompat(別名 ActionBarCompat)は Android 4.0 の ActionBar API を Gingerbread 搭載デバイスに対応させるためのバックポートとしてはじまり、バックポートとフレームワーク共通の API レイヤーを提供していました。AppCompat v21 は Android 5.0 に対応した機能と API をお届けします。

このリリースで、Android は新しい Toolbar ウィジェットを導入します。これは、より正確なコントロールと柔軟性を可能にする Action Bar パターンを一般化したものです。Toolbar はビュー階層内に存在しているので、他のビューとの共存や、アニメーション、スクロールイベントへの反応といったことが簡単にできます。Activity の Action Bar として設定することもできるので、通常のオプション メニューのアクションをその内部に表示させることも可能です。

最新の AppCompat はここ数週間でいくつもの Google アプリ(Play ストアや Play ニューススタンドなど)のアップデートに含まれているので、すでにみなさんも使用されているはずです。上記の画像の Google I/O Android アプリ(オープンソース)もすでに最新の AppCompat に対応しています。

セットアップ

Gradle を使用している場合は、build.gradle ファイルに appcompat を依存関係(dependencies)として追加します。

dependencies {
    compile "com.android.support:appcompat-v7:21.0.+"
}

新規にはじめる場合

現在 AppCompat を使用していないか、これから新規にはじめる場合の設定方法です。
より詳細な情報は、AppCompat の総合的なガイド Action Bar API guide を参照してください。

既存のセットアップからの移行

ほとんどのアプリでは、values/ にテーマを 1 つ宣言するだけで大丈夫です。

values/themes.xml:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- AppCompat の actionBarStyle を設定 -->
    <item name="actionBarStyle">@style/MyActionBarStyle</item>
    
    <!-- AppCompat の color theming attrs を設定 -->
    <item name=”colorPrimary”>@color/myawesomered</item>
    <item name=”colorPrimaryDark”>@color/myawesomedarker_red</item>
    
    <!-- 他の属性 -->
</style>

これで values-v14 以上の Action Bar のスタイルはすべて削除しても大丈夫です。

テーマ

AppCompat は新しい Color Palette のテーマの属性をサポートしており、あなたのブランドに合った主要色と強調色のテーマを容易にカスタマイズできます。

values/themes.xml:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
  <!-- colorPrimary is used for the default action bar background -->
  <item name=”colorPrimary”>@color/my_awesome_color</item>

  <!-- status bar には colorPrimaryDark が使用されます -->
  <item name=”colorPrimaryDark”>@color/my_awesome_darker_color</item>

  <!-- ウィジェットに色合いを付ける colorControlActivated のデフォルト値として colorAccent が使用されます -->
  <item name=”colorAccent”>@color/accent</item>

  <!-- 他にも colorControlNormal、colorControlActivated、
         colorControlHighlight と colorSwitchThumbNormalを設定できます -->
</style>

これらの属性を設定すると、AppCompat は自動的に API 21以上のフレームワーク属性の値に影響し、ステータスバーや Overview (履歴)のエントリーの色が自動で設定されます。

旧来のプラットフォームでは、 AppCompat は可能な箇所ではカラーテーマをエミュレートします。現時点では Action Bar といくつかのウィジェットに色を付けることに限定されています。

ウィジェットの色付け

Android 5.0 を搭載したデバイスでは、すべてのウィジェットは上述のカラーテーマ属性を使用して色付けされています。Lollipop でこれを可能にしているのは2つの機能です。drawable tinting と  drawable におけるリファレンステーマ属性(?attr/fooの形式)です。

5.0 より前のバージョンの Android では、AppCompat は UI ウィジェットのサブセットに対して類似の機能を提供します。
これらが機能するために特別何かを設定する必要はありません。通常通りレイアウト内でこれらのコントロールを使用すれば、あとはAppCompat が処理してくれます(いくつかの注意事項がありますので、最下部の FAQ を参照してください)。

Toolbar ウィジェット


Toolbar は AppCompat で完全にサポートされ、フレームワーク ウィジェットと同等の機能と API をもちます。AppCompat では、Toolbar は android.support.v7.widget.Toolbar クラスに組み込まれています。Toolbar を使用するには2つの方法があります。

Action Bar

Toolbar を Action Bar のように使用するには、まずあらかじめ外観が提供されている Action Bar を無効にします。Theme.AppCompat.NoActionBar(もしくはこれのバリエーション)からテーマを拡張するのが最も簡単な方法です。

次に、Toolbar インスタンスを作成します。(通常、レイアウトを指定する XML を使用します)

<android.support.v7.widget.Toolbar
    android:id=”@+id/my_awesome_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent”
    android:minHeight=”?attr/actionBarSize”
    android:background=”?attr/colorPrimary” />

例としては、高さ、幅、背景などを望むままに設定できます。Toolbar は ViewGroup なので、スタイルも配置も自由に行えます。
そして Activity か Fragment にて、Toolbar が Action Bar として機能するように設定します。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

   Toolbar toolbar = (Toolbar) findViewById(R.id.myawesometoolbar);
    setSupportActionBar(toolbar);
}

これで、通常のオプション メニュー コールバックを経由して、すべてのメニュー アイテムは Toolbar に表示されます。

スタンドアローン

スタンドアローン モードの違いは、Toolbar を Action Bar として機能させない点です。これにより、すべての AppCompat テーマを適用することができ、予め外観が提供されている Action Bar を無効にする必要がありません。
スタンドアローン モードでは、Toolbar のコンテンツやアクションを手動で入力しなくてはいけません。たとえばアクションを表示させたいのであれば、メニューを inflate する必要があります。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.blah);

   Toolbar toolbar = (Toolbar) findViewById(R.id.myawesometoolbar);

   // メニューアイテムのクリックに対応するために、OnMenuItemClickListener を設定
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            // メニューアイテムに対応
            return true;
        }
    });

   // toolbar に表示されるようにメニューを inflate
    toolbar.inflateMenu(R.menu.yourtoolbarmenu);
}

Toolbar でできることは他にもたくさんあります。詳細については Toolbar API reference を参照してください。

スタイル

Toolbar のスタイルは通常の Action Bar とは異なっており、ビューを直接設定します。
下記は Toolbar を Action Bar として使用しているときに採用すべき基本的なスタイルです。

<android.support.v7.widget.Toolbar  
   android:layoutheight="wrapcontent"
   android:layoutwidth="matchparent"
   android:minHeight="?attr/actionBarSize"
   app:theme="@style/ThemeOverlay.AppCompat.ActionBar" /> 
app:theme 宣言によって、テキストとアイテムが単色塗りつぶしとなります。(100% 不透明な白色など)

DarkActionBar

レイアウト属性を使用することで、Toolbar のインスタンスのスタイルを直接設定できます。「DarkActionBar」(コンテンツは暗く、オーバーフロー メニューは明るい) のように見える Toolbar を作成するには、適切なテーマ属性と popupTheme 属性を設定します。

<android.support.v7.widget.Toolbar
   android:layoutheight=”wrapcontent”
   android:layoutwidth=”matchparent”
   android:minHeight=”@dimen/tripleheighttoolbar”
   app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

SearchView ウィジェット

AppCompat は Lollipop で刷新された SearchView API を提供しますので、今までよりもカスタマイズ性とスタイル設定に優れています。これからは旧来の searchView* テーマ属性の代わりに、Lollipop 式の構造を使用します。
SearchView のスタイル設定方法は以下の通りです。

values/themes.xml:

<style name=”Theme.MyTheme” parent=”Theme.AppCompat”>
    <item name=”searchViewStyle”>@style/MySearchViewStyle</item>
</style>
<style name=”MySearchViewStyle” parent=”Widget.AppCompat.SearchView”>
    <!-- 検索クエリ部分(EditText など)の背景 -->
    <item name="queryBackground">...</item>
    <!-- アクション部分(voice、submit など)の背景 -->
    <item name="submitBackground">...</item>
    <!-- Close ボタンアイコン -->
    <item name="closeIcon">...</item>
    <!-- Search ボタンアイコン -->
    <item name="searchIcon">...</item>
    <!-- Go/commit ボタンアイコン -->
    <item name="goIcon">...</item>
    <!-- Voice search ボタンアイコン -->
    <item name="voiceIcon">...</item>
    <!-- クエリ サジェスチョン行に表示される Commit アイコン -->
    <item name="commitIcon">...</item>
    <!-- クエリ サジェスチョン行の レイアウト -->
    <item name="suggestionRowLayout">...</item>
</style>

ほとんどのアプリにおいてはデフォルトのままでも正常に機能しますので、これらをすべて(あるいは 1 つも)設定する必要はありません。

Toolbar が今ここに…

この記事が AppCompat の使いはじめと、素晴らしいマテリアル アプリの製作の一助となれれば幸いです。AppCompat をはじめとするサポート ライブラリについての質問や、ドキュメントを増やすべき分野がありましたら、コメント欄や Google+、Twitter などでお知らせください。

FAQ

Lollipop 導入前のデバイスで EditText(もしくは前述のウィジェットの1つ)が正しく色付けされていないのはなぜですか?
AppCompat のウィジェット色付けは、レイアウト inflation を感知して、色付けに対応した特別なウィジェットを代わりに差し込む仕組みになっています。ほとんどの場合はこれで正しく機能しますが、下記のような例外ケースも考えられます。
色付けに対応した特別なウィジェットは未完成のため、現在隠されています。今後変わる可能性があります。

Lollipop 導入前のデバイスでは特定のウィジェットにマテリアル スタイル化されていないのはなぜですか?
現時点まででアップデートされたのは、最も広く使われているウィジェットだけだからです。今後の AppCompat リリースとともに増えていきます。

android:windowContentOverlay は null に設定しているのに、Android Lollipop で私の Action Bar にシャドウがあるのはなぜですか?
Lollipopでは、新しい Elevation API を使って Action Bar にシャドウを付与しています。取り除くには、getSupportActionBar().setElevation(0) をコールするか、Action Bar スタイルで Elevation 属性を設定します。

Lollipop 導入前のデバイスではリップル効果がないのはなぜですか?
RippleDrawable の動作は Android 5.0 の新しい RenderThread に大きく依存します。現状 5.0 より前のバージョンの Android では、パフォーマンス最適化のため RippleDrawable は含まれていません。

Preferences で AppCompat を使用するにはどうしたらいいですか?
API v11 以上のデバイスでは、引き続き ActionBarActivity で PreferenceFragment を使用できます。それより古いデバイスではマテリアル スタイル化されていない、通常の PreferenceActivity を提供する必要があります。

Posted by 荒木佑一 Developer Relations Team
Share on Twitter Share on Facebook

6 月の Google I/O で Google は L Developer Preview として、Nexus 5、Nexus 7、Android TV で動作する開発者用の早期バージョンの Android 5.0 を公開しました。この L Developer Preview を通じて、これまで開発者コミュニティの多くの人たちから素晴らしいフィードバックをいただきました。ご協力に感謝いたします。

先週 Google は Android 5.0 Lollipop を発表いたしました。現在、リリースされたばかりの Android 5.0 SDK がダウンロードできるようになっています。あわせて、Nexus 5、Nexus 7(2013 年モデル)、ADT-1、Android エミュレータの開発者用システム イメージも入手できます。

この新しいバージョンの Android が搭載される最初のデバイス(Nexus 6、Nexus 9、Nexus Player)は、11 月上旬より順次提供開始いたします。また時期をあわせて、全世界の Nexus 4、Nexus 5、Nexus 7(2012 年モデル、2013 年モデル)、Nexus 10、各種の Google Play エディション端末に対して、Android 5.0 アップデートの提供を順次開始していきます。

今がまさに、あなたのアプリを この新しいプラットフォームで動作検証していただきたいタイミングです。準備万端ととのえるまで、あと 2 週間です。

Lollipop が提供する新しい機能

Android 5.0 Lollipop には、多くの新しい API や機能が追加されています。以下はその一部です:
他にも多くの機能があります。全体の概要については、Android 5.0 platform highlights をご参照ください。

Android 5.0 SDK が提供する内容

Android 5.0 SDK には、最新のツール群と、動作検証のための新しい開発者用システム イメージが含まれています。最新の Android プラットフォームに向けて開発していただくために、API Level 21 を活用し、最新の Support Library を使って Material Design 対応を行い、テレビ向けアプリでは Leanback ユーザー インターフェースを活用することができます。

以下のようなコンポーネントを、Android SDK Manager からダウンロードし、Android Studio で利用できます:
C/C++ による開発に Android NDK を利用している開発者のために:
Android TV 環境に対応している開発者のために:
前回のプレビュー版リリースと同様に、Nexus 5、Nexus 7(2013 年モデル)での動作検証に利用できる更新版システム イメージのダウンロードを提供いたします。これらのシステム イメージは Android 5.0 SDK に対応しており、開発者による動作検証を可能にするための最小限のアプリのみがプリ インストールされています:
開発者用プレビュー版には、OTA(Over-The-Air)形式でのアップデートの配信は予定しておりません。最新の開発者用プレビュー版を利用するには、端末を再度フラッシュする必要があります。11 月の一般向け OTA アップデートや その他の公式 OTA アップデートを受信するには、Nexus 端末に工場出荷時のイメージを再度フラッシュする必要がありますのでご了承ください。

あなたのアプリを Android 5.0 SDK に対応してください

近日中に予定されている Android 5.0 の一般ユーザーへの提供開始と、Nexus 6、Nexus 9、Nexus Player の提供開始に向けて、いくつかの準備をお願いいたします:
アプリの動作が問題ないことが確認できましたら、Android 5.0 の新しい API や機能の活用をご検討ください。

あなたの既存アプリを Material Design に移行しましょう

Android 5.0 Lollipop は、Material Design 体験を提供するよう設計されています。あなたのアプリにおいて、さまざまな画面サイズやマルチデバイス環境における適切なユーザー インタラクションを導くための少数の重要な原則に配慮しつつ、先進的で柔軟なデザインを提供していただくことができます。

あなたの現在のアプリが Android 5.0 で動作することが確認できましたら、ぜひ AppCompat Support Library を使って、Material テーマに対応してください。Material Design でアプリの価値を高めるための推奨事項については、 Material Design ガイドラインやタブレット最適化ガイドラインをご参照ください。Material Design について初めてプログラミングされる方は、Getting Started ガイドをご参照ください。

Google Play での準備をすすめましょう

いますぐに、Android 5.0 Lollipop をターゲットとするアプリを Google Play で公開していただけます。アプリのマニフェスト(AndroidManifet.xml)の中で、android:targetSdkVersion を "21" に更新し、動作検証して Google Play デベロッパーコンソールにアップロードしてください。

11 月 3 日(米国時間)から、Nexus 9 の提供開始が予定されており、これが一般ユーザーが利用可能な最初の Android 5.0 搭載端末となります。アプリを改修して動作検証が できましたら、お早めに Google Play に更新版を公開することをお勧めします。あなたのアプリが 以前のバージョンの Android をターゲットとしている場合にも、Android 5.0 システム イメージを使って動作確認を実施し、一般ユーザー向けの Android 5.0 提供が始まる前に必要に応じてアプリを更新することをお勧めします。

Nexus 6、Nexus 9 についてのより詳しい情報と、これらの端末上で あなたのアプリを最も美しく表現するための さまざまな手法について、追って順次情報を提供してまいります。

次は、Android TV です

Google は、最初の一般ユーザー向け Android TV 端末である Nexus Player を発表しました。これは、映画や音楽、ビデオ映像のストリーム再生を行うことのできるメディアプレイヤー端末であり、これまでなかった種類の Android ゲーム機でもあります。ユーザーは、ゲームパッドを使って高解像度テレビでゲームを楽しみ、外出時にはスマートフォン上で同じゲーム作品を引き続き楽しむことができます。また、この端末は Google Cast 機能も搭載しており、ユーザーは手元のスマートフォンやタブレット上で実行されている あなたのアプリのコンテンツをテレビ画面にキャストすることができます。

もし Android TV 対応アプリを開発されている場合には、Google Play デベロッパーコンソールを使って Android TV ユーザーにアプリを配信する方法についての追加情報を 11 月 3 日(米国時間)頃に公開予定ですのでご参照ください。あなたのアプリが TV Quality Guideline に準拠するように配慮することで、テレビ対応アプリの準備をすすめていただくことができます。

Android 5.0 Lollipop プラットフォームに対応した開発を、さあ始めましょう

もしまだこの新しいバージョンの Android をご覧になったことがない場合には、SDK をダウンロードして、すぐに開発を始めましょう。新機能の概要を Android 5.0 platform highlights でご確認ください。新しい API や挙動の変更点については API Overview をご参照ください。最新の DevBytes ビデオ番組をご覧になって Android 5.0 の新機能について理解を深めていただくこともできます。

この新しい Android リリースを、どうぞよろしくおねがいいたします。

Android Development Japan
に参加する



[本記事は Android のプロダクト マネージャー Jamal Eason が 10 月 17 日(米国時間)に Android Developers blog に投稿した "Android 5.0 Lollipop SDK and Nexus Preview Images" という記事を元に、翻訳・作成しています。 - 松内]
Share on Twitter Share on Facebook