2016/04/16

Android: ScreenZoomを試す際の注意点

Screen Zoom

Android N Developer Previewで搭載されたユーザ補助機能Screen Zoom.
低視力者はこの機能を使うことで表示を拡大した状態で使うことができます.
(あるいは表示を縮小して情報量を増やすことも可能です)

このScreenZoom機能はDensityDPIを変更することで表示の拡大・縮小を実現しています.
DensityDPI値を大きくしても画面の物理サイズ(px)は変わりませんので結果的に拡大表示されているように見せることができる仕組みです.
デフォルトがxxhdpiなNexus5Xも, ScreenZoomの設定でxhdpi, xxxhdpiに変更できます.
開発者はAndroidN以降で端末のDensityDPIが変更される可能性を考慮する必要があります.

drawable-xxx

ScreenZoomでDensityが変わりますので, drawable-xhdpi, drawable-xxhdpiなど設定によって適切なdpi設定修飾子のリソースが選択されるようになります.
ただ, 動作確認でハマったポイントがありました.

AndroidStudio2.1で動作確認したところ, たとえ各DPI毎のdrawableリソースを持っていたとしても, ScreenZoomの設定を変えてもそれらが適切に反映されませんでした.

例): ScreenZoom値を変えても参照されるdwarableリソースが変わらない…

ドロイド君アイコンに格納したDPIの値を記載しています. 上記はdrawalbe-xxhdpiに格納された画像が表示されている状態です.

原因はAndroidStudioがインストール先のデバイスを決定してから作成するapkにありました.
実際に作成されているapkを確認すると, インストール対象デバイスのデフォルトDensityDPI以外のリソースを削除している様子でした.
動作確認をするためには./gradlew :app:assembleDebugで全DensityDPI向けのdrawableを含めたapkを作成し, インストールする必要がありました.

例): ScreenZoom値を変えると参照されるdwarableリソースが変わる

以上です.