Oreoの新機能について ユーザー エクスペリエンス編

# きっかけ
Pの開発が進んでいるタイミングですが、そろそろ、Oreo対応を進めるための情報整理を目的として書いてます。
内容は[こちら](https://developer.android.com/about/versions/oreo/android-8.0)参考にしています。なるべく網羅していますが、あまり重要ではなさそうなものは記載していないです。（随時更新入れるかもしれません）
本記事はOreoの機能としてピックアップしていますが、サポートライブラリで提供しているものもあります。

## ユーザー エクスペリエンス
### 通知
* 通知チャンネル
    * プッシュをカテゴリに分類して、カテゴリ毎に通知設定が可能になりました。今までプッシュが多いとアプリ全部のプッシュを受け取らないようにしていたと思いますが、カテゴリ毎に設定ができるようになりました。例えば、Chromeなら、Browser、Downloads、Media、シークレットなどのカテゴリに分かれていました。ユーザとしては重要なカテゴリだけ通知欲しいとか、音を鳴らすなどの設定できるようになりました。

* 通知バッジ
    * アプリのランチャー アイコンの上に通知バッジを表示する機能が導入されています。!（Xperiaだと青い点が表示されます。）

![Screenshot_20180615-161439__.png](https://qiita-image-store.s3.amazonaws.com/0/36517/84b46b79-f36e-e6fe-205d-4608cb9f7efa.png)

* 長押しすると通知を表示することもできます。

![badges-open_2x.png](https://qiita-image-store.s3.amazonaws.com/0/36517/b55aa5d5-74c1-1ef9-44d0-75cfbb0d4f1f.png)

* 通知タイムアウト
    * 通知を非表示にする時間を指定できます。（永続的に表示させなくても良い通知、上書きしても良い通知に使えそうです。）

* 通知の消去
    * ユーザーが消去したのか、またはアプリが削除したのかをシステムが判定できるようになりました。


### Autofill フレームワーク
* ログインやクレジット カードなどのフォームの入力を簡単にする機能のようです。

### ピクチャ イン ピクチャ モード
* アプリを全画面表示ではなく、小さな画面として表示して、複数のアプリや画面を同時に表示させることができます。（下の画像はgoogleMapを小さな画面で開いています）

![Screenshot_20180614-125128.png](https://qiita-image-store.s3.amazonaws.com/0/36517/969f9f7c-4798-3414-f372-e70b2b8193f4.png)


### API の変更
* ピクチャインピクチャを制御するAPIが公開されているようです。

### ダウンロード可能なフォント
> Android 8.0 と Android Support Library 26 では、フォントを APK にバンドルする、または APK からフォントをダウンロードする代わりに、プロバイダのアプリからフォントを要求できます。この機能を利用すると、APK のサイズを削減し、アプリのインストール成功確率を高め、複数のアプリが同じフォントを共有できるようになります。

* フォントの種類が乏しいのでうまく使えば表現が豊かになりそう。オフラインのことも考える必要がありそうです。

### XML フォント
> フォントをアセットにバンドルする必要はなくなります。フォントは R ファイルでコンパイルされ、システムで自動的にリソースとして利用できるようになります。


### TextView の自動サイズ設定
> 異なる画面や動的コンテンツでテキストのサイズを最適化するのが以前よりもずっと簡単になります。

* 領域にいっぱいに広がってテキストが表示されるようです。spの指定が必要なくなる。zeplinの指定と異なる大きさになることもありそうです。
* [参考](https://qiita.com/Kettsun0123/items/d1e22326efc50a2e69b4)

### アダプティブ アイコン
* ランチャーアイコンの統一化。アニメーションもつけられるようです
* [参考1](https://qiita.com/takahirom/items/696fb5ecaa230fa8f755)
* [参考2](https://medium.com/google-design/designing-adaptive-icons-515af294c783)

<追記>
アニメーションを試しましたが、Homeアプリ [(サンプル)](https://blog.endstart.net/article/438151521.html)に依存するようで、Xperia X Compatの「Xperia Home」、Nexus 5Xの「Google Nowランチャー」（どちらもOreoインストール済み）では動きませんでした。Nova Launcherでは動きました。思っていたよりも対応機種が少ない気がします。


### 色の管理
> Android のイメージング アプリのデベロッパーは、広色域ディスプレイを搭載した新しい端末の機能を活用できるようになります。

### WebView API
* webViewに新しいAPIが追加されました。
    * Version API
    * Google SafeBrowsing API
        * 安全でないサイトを表示しようとすると警告を出すようにできる
    * Termination Handle API
    * Renderer Importance API

### ピン留めされたショートカットとウィジェット
* iOSでいうとクイックアクションのようなもの
* ランチャーアイコンをロングタップすると表示できる
* [参考](https://qiita.com/NUmeroDev/items/08e25684859ad268395a)

![Screenshot_20180615-162749.png](https://qiita-image-store.s3.amazonaws.com/0/36517/cb464c05-cd42-5b75-e705-849cbacf8e18.png)

### 最大画面アスペクト比
> Android 8.0 以降を対象としたアプリには、最大アスペクト比のデフォルト設定がありません。アプリに最大アスペクト比を設定する必要がある場合には、Activity を定義するマニフェスト ファイル内でmaxAspectRatio属性を使用してください。

### マルチディスプレイのサポート
> Android 8.0 以降では、プラットフォームでの複数ディスプレイのサポートが拡張されています。マルチウィンドウ モードをサポートするアクティビティが複数ディスプレイの端末で実行されている場合、ユーザーはアクティビティを別のディスプレイに移動できます。アプリでは、アクティビティを起動する際に使用するディスプレイを指定できます。


### 統一されたレイアウト マージンとパディング
* レイアウト指定が便利になりました

> layout_marginTop と layout_marginBottomを同時に定義する layout_marginVertical。


### ポインタ捕捉
* アプリのViewがマウスイベントを取得できるようになるようです。
    * スワイプイベントの処理など書きやすくなるのかもしれません。

### アプリカテゴリ
> アプリごとに適合するカテゴリを宣言することができます。これらのカテゴリは、データ使用量、バッテリー消費量、ストレージ使用量などに関してユーザーにアプリを提示する際に、目的や機能が似ているアプリをまとめるために使用されます。

### Android TV ランチャー
* Android TV 対応のアプリ一覧を表示できるようになったようです 

> 新しいホーム画面は、動画コンテンツをチャンネルに対応させた行ごとに表示し、各チャンネルは、システム上のアプリによりプログラムとともに生成されます。

### AnimatorSet
* アニメーションを逆再生できるようです

### 入力とナビゲーション
* Chromebookeなどでアプリを利用するときに、キーボードで操作しやすくするためにUI要素をグループ化できるようになりました。

> キーボードのナビゲーションを容易にするため、UI 要素のグループをクラスタに編成することをお勧めします。ユーザーは Chromebook 端末で Meta+Tab または Search+Tab を押してクラスタ間を移動できます。



# 終わりに
次はシステムのアップデート内容をまとめる予定です。