SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Android Q対応
Gestural Navigation
Dark Theme
GDG Kyoto 2019/05/17 @furusin_oriver
Android Q で対応が必要なこと
● Gestural Navigation
● Dark Theme
● SYSTEM_ALERT_WINDOW deprecated
● android.preference deprecated
● バックグラウンドでロケーションが必要な場合、追加のPermissionが必要
● Share Sheet
● Bubbles
● etc...
Android Q で対応が必要なこと
● Gestural Navigation
● Dark Theme
● SYSTEM_ALERT_WINDOW deprecated
● android.preference deprecated
● バックグラウンドでロケーションが必要な場合、追加のPermissionが必要
● Share Sheet
● Bubble
● etc...
今日はここ
Gestural Navigation
Gestural Navigation?
画面遷移などのジェスチャーのこと。
Navigation Barの設定によって変わる
Navigation Barのタイプ
3-button Navigation
2-button Navigation
Full Gestural Navigation
Navigationの動き
なぜ生まれたか?
Navigation Barはメーカーによってデザインは異なるため、
アプリ開発は難しくなってきている
そのため、ベースを統一したかった
Gestural Navigation
● Gestureは2種類
○ 画面左右からスワイプで「戻る」挙動
○ 画面下部からスワイプでアプリ切り替え
● 将来的には2種類のNav Modeをサポート
○ 3-button Navigation
○ Full Nav Gesture Mode
● Gestureは奪うことも可能
Gestureの種類
● 画面左右からスワイプ
○ 「戻る」挙動(右も!)
Gestureの種類
● 画面下部からスワイプ:アプリ切り替え
○ 必須。殺せない
○ 指を離したらonPause→onStopが呼ばれる
○ 戻ってきたらonRestart→onResumeが呼ばれる
Gestural Navigation対応へのロードマップ
1. UIを “edge-to-edge” にする
2. 端にあるWidgetでGestureと競合するものをいい感じにする
例)DrawerLayoutやImageCropのポイント
UIを “edge-to-edge” にする
● Step1. Status Barの後ろにも描画する(推奨)
UIを “edge-to-edge” にする
● Step2. Navigation Barの後ろにも描画する(強く推奨)
UIを “edge-to-edge” にする
● Step2. Navigation Barの後ろにも描画する(強く推奨)
a. 古いOSバージョンの場合はNavigation Barを半透明にすること
b. ScrollViewとかは一番下に「Navigation Barの分の余白」を追加する必要
がある
c. Bottom SheetsはNavigation Barの領域も含めたサイズにする
UIを “edge-to-edge” にする
● 備考
Navigation Barの裏に色の濃いものが来た場合、システムボタンは色が自動で
変わる
UIを “edge-to-edge” にする
● Step3. Insets
a. System Window Inset(Navigation Barとか)
i. クリック可能なViewは避けて配置する(例:FAB)
ii. 3 Button Navigation Barの場合は、更に上に設置することになる
Gestureと競合するものをいい感じにする
● 画面の端に
ドラッグできるものを
置きたい
Gestureと競合するものをいい感じにする
View.setSystemGestureExclusionRects()
で競合を奪うことが可能
Gestureと競合するものをいい感じにする
override fun onDraw(canvas: Canvas?) {
//..
ViewCompat.setSystemGestureExclusionRects(this, rects)
}
● setSystemGestureExclusionRectsは
onLayout もしくは onDraw で呼ぶ(onDrawの方がいいかも?)
Gestureと競合するものをいい感じにする
override fun onDraw(canvas: Canvas?) {
//..
val isSupplyGestureExclusion = BuildCompat.isAtLeastQ()
if (isSupplyGestureExclusion) {
ViewCompat.setSystemGestureExclusionRects(this, rects)
}
}
● ちゃんとやるならこう?
Gestureと競合するものをいい感じにする
・DrawerLayoutとSeekBarは別途AndroidXで対応される
https://developer.android.com/jetpack/androidx/releases/drawerlayout#1.1.0-alpha01
ちゃんと中で
ViewCompat.setSystemGestureExclusionRects(this, rects);
が呼ばれてる
(けど…Javaなんやな…)
DrawerLayoutはまだ検討中なのかも
Dark Theme
なぜ生まれたか?
● アプリをより暗い環境でも使いやすくす
るするため
○ 暗い部屋や暗い環境でも使えるように。アプリ
を使えるシチュエーションを広げる
● バッテリーを守る
○ 最大60%は削減できる
● 目の保養
適用方法
● Force Dark
○ アプリへ自動的にダークモードを適用する
(これだけでイケるかもしれない:Android Qだけで適用される)
● Custom Dark
○ 「ダークモードの時は何色にする」と独自に指定
○ こっちのほうがデザインとして圧倒的に良い(工数はかかる)
Force Dark
● 適用方法
○ <item name="android:forceDarkAllowed">true</item>
○ DayNight Themeを使う(Material Componentでもいいです)
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
Custom Dark
● Dark Modeのときに使う -nightリソースも作ることができる
○ 通常:values/themes.xml
○ Dark Mode:values-night/themes.xml
AppCompatへ「どのモード?」を伝える
● モードの種別:Int(AppCompatDelegete)
○ MODE_NIGHT_AUTO_BATTERY:バッテリーセーバーがONでナイトモード
○ MODE_NIGHT_NO:ナイトモードを使わない
○ MODE_NIGHT_YES:ナイトモードを常に使う
○ MODE_NIGHT_FOLLOW_SYSTEM:端末の設定に従う
○ MODE_NIGHT_AUTO_TIME:deprecated
AppCompatDelegate.setDefaultNightMode(mode:Int);
getDelegate().setLocalNightMode(mode:Int);
画像もダークテーマ対応が必要
values-night/colors.xml values/colors.xml
アプリではテーマを選べるようにすべき
ちなみに
● アプリ起動中にDark ThemeのON/OFFを切り替えると、ア
プリが再起動されます
○ onPause
○ onStop
○ onDestroy
○ ↓
○ onCreate
○ onStart
○ onResume
まとめ
● Gestural Navigation
○ アプリは画面全体に表示
○ 左右はあける。ただしDrawerLayoutはAndroidXでいい感じにしてくれる
○ どうしても左右にモノを置きたい場合は
View.setSystemGestureExclusionRects(listOf(Rect(a,a,a,a))を使う
● Dark Theme
○ Force Darkで意外となんとかなる
けどなんとかならない所もあるのでThemeでちゃんとやろう
○ アプリでテーマを選べるようにすべき
○ 画像もダークテーマ対応が必要
○ 「対応しないという選択肢」はない
ご清聴ありがとうございました

Contenu connexe

Plus de furusin

Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門furusin
 
コロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったコロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったfurusin
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recapfurusin
 
Android billing library 2.0 recap
Android billing library 2.0 recapAndroid billing library 2.0 recap
Android billing library 2.0 recapfurusin
 
社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性furusin
 
デザインフローについて考え直す
デザインフローについて考え直すデザインフローについて考え直す
デザインフローについて考え直すfurusin
 
Build your first wear app
Build your first wear appBuild your first wear app
Build your first wear appfurusin
 
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたfurusin
 
Pray for hokkaido from osaka
Pray for hokkaido from osakaPray for hokkaido from osaka
Pray for hokkaido from osakafurusin
 
Google Codelabsをやってみた
Google CodelabsをやってみたGoogle Codelabsをやってみた
Google Codelabsをやってみたfurusin
 
個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要furusin
 

Plus de furusin (11)

Jetpack datastore入門
Jetpack datastore入門Jetpack datastore入門
Jetpack datastore入門
 
コロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わったコロナ禍でコミュニティ運営はこう変わった
コロナ禍でコミュニティ運営はこう変わった
 
Android dev summit 2019 recap
Android dev summit 2019 recapAndroid dev summit 2019 recap
Android dev summit 2019 recap
 
Android billing library 2.0 recap
Android billing library 2.0 recapAndroid billing library 2.0 recap
Android billing library 2.0 recap
 
社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性社内システムにおける 「使いやすさ」の重要性
社内システムにおける 「使いやすさ」の重要性
 
デザインフローについて考え直す
デザインフローについて考え直すデザインフローについて考え直す
デザインフローについて考え直す
 
Build your first wear app
Build your first wear appBuild your first wear app
Build your first wear app
 
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみたネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
ネイティブAndroidエンジニアがVueNativeでiOSアプリを作ってみた
 
Pray for hokkaido from osaka
Pray for hokkaido from osakaPray for hokkaido from osaka
Pray for hokkaido from osaka
 
Google Codelabsをやってみた
Google CodelabsをやってみたGoogle Codelabsをやってみた
Google Codelabsをやってみた
 
個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要個人開発アプリの紹介と実装内容の概要
個人開発アプリの紹介と実装内容の概要
 

Dernier

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Dernier (9)

デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

Android Qにおける Gestural Navigation and Dark Theme