Chrome でやってみます。
こんな感じにスワイプします。

分かりづらいですね!
動画で。
以下のような流れです。
1. Chrome を開いた状態から、

2. 下のバーを「ゆっくり」上にスワイプして、

3. 指を離すと、上部にアイコンで小さく表示されますので、

4. それを上スワイプすると、

5. Chrome 終了!

きちんと終了されているので、アプリリストにも残っていませんね!

慣れたら素早くできるようになりますかね!
Chrome でやってみます。
こんな感じにスワイプします。

分かりづらいですね!
動画で。
以下のような流れです。
1. Chrome を開いた状態から、

2. 下のバーを「ゆっくり」上にスワイプして、

3. 指を離すと、上部にアイコンで小さく表示されますので、

4. それを上スワイプすると、

5. Chrome 終了!

きちんと終了されているので、アプリリストにも残っていませんね!

慣れたら素早くできるようになりますかね!
前にも書きましたが。
👉 入力文字の 日本語 と 英数記号 切り替えをシンプルにする設定
今現在の Gboard でもなんだか気持ちが悪いのですが。
日本人が使おうとするとき、QWERTYキーは3種類あります。
次のようにキーのレイアウトと表示される候補が違うのがわかります。
「日本語12キーから設定する英字QWERTY」

「日本語QWERTY」

「英語QWERTY」

このことが設定を分かりづらくさせています。
英語QWERTYでは、キー上をなぞって高精度に素早く英単語を変換できる「グライド入力」を使うことができます。
よって、3種類を表にすると以下のようになります。
| QWERTY | 変換候補 | グライド入力 |
|---|---|---|
| 12英字 | 英語 2列 | ✕ |
| 日本語 | 日本語 2列 | ✕ |
| 英語 | 英語 1列 | ◯ |
私の場合ですが。
日本語文字
→ 12キー【フリック入力】で
→ 【日本語単語】候補表示・選択
→ 入力欄に反映英数文字
→ QWERTYキー【グライド入力】で
→ 【英単語】候補表示・選択
→ 入力欄に反映
そんな設定にしたい人用にまとめておきます。
1. 「キーボードの言語とレイアウト」は、「日本語 12」と「英語(米国) QWERTY」のみ。


2. 「グライド入力」は、すべて有効化。


3. 「12キーレイアウトの設定」は「英字入力は QWERTY」をOFF。


4. 「キー」は「言語切り替えキーを表示」をON。


5. 日本語と英数の切り替えは「多言語切り替えボタン」で行う。


最後に、設定画面上のQWERTYキー設定位置を図にして概念的に分かりやすくしておきます。
使いたいQWERTYキー1つだけを有効にすることが大事です。

みんなはどうしてますか?
ちなみに、複数のキーボードアプリ間を切り替え利用したいときにも「多言語切り替えボタン」は役に立ちます。
👉 Split layouts into subfolders in Android Studio - ProAndroidDev
以下のコードを見ながら。
👉 GitHub - android/architecture-samples at dagger-android
コードは、画面別にディレクトリ分けしてるが、レイアウトファイルは、複雑なファイル名で res ディレクトリ直下に一緒くたに入ってる。

ここで、build.gradle で設定記述を追加する。
android {
sourceSets {
main {
res.srcDirs = [
'src/main/res',
'src/main/res/layouts/tasks',
'src/main/res/layouts/taskdetail',
'src/main/res/layouts/addedittask',
'src/main/res/layouts/statistics',
]
}
こうすることで、レイアウトファイル群を画面別に分けることができる。

Android Studio はデフォルトで、一つのディレクトリのみ
android {
sourceSets {
main {
res.srcDirs = [
'src/main/res'
]
と等価な設定を持ってるので、それに、画面別ディレクトリを複数追加することで、Android Studio は、リソースファイルとして複数ディレクトリからファイルを読み込むことができるようになります。
あとは、それぞれのリソースファイルを振り分けて置くだけ。
以下、やってみた動画。
実際は、レイアウトファイルがもっと多くなるはずなので、分かりやすさはより顕著になる。
👉 Split layouts into subfolders in Android Studio - ProAndroidDev
できるだけ長く使いたい Android 端末を考えると、公式サポート切れからのLineage OS 乗り換えで延命が定石。
以下、Lineage OS をインストールできるいくつかの Android 端末の 「発売日」。
Pixel 2018/11Huawei
P20 Pro 2018/06Sony
XPeria XA2 Ultla 2018/02Samsung
S5 Plus 2014/11
ベンダー依存は少なく素のAndroidである Pixel シリーズが間違いない。

ベンダーカスタムの量が多い Samsung などはオープンソースとしての開発者が寄り付かずカスタムOSでも更新が遅すぎなのか?
👉 Drive your UI with SQLDelight’s views | Leandro Favarin
👉 GitHub - cashapp/sqldelight: SQLDelight - Generates typesafe Kotlin APIs from SQL
SQLDelight は、すべてのクエリーに対して自動的にモデルオブジェクトを作成します。
以下シンプルな名前付きクエリー。
bandsOrderedByName:
SELECT id, name
FROM band
ORDER BY name DESC;
bandsOrderedByAge:
SELECT id, name
FROM band
ORDER BY age;
これから以下が作成される。
data class BandsOrderedByName(id: String, name: String)
data class BandsOrderedByAge(id: String, name: String)
実際は、もっと複雑になります。
以下、join句を使ったクエリーの場合。
SELECT
band.id,
band.name,
album.*
FROM band
JOIN album ON band.id = album.band_id;
SQL View を使うとエレガントになります。

👉 SQLite Query Language: CREATE VIEW
CREATE VIEW bandWithAlbum AS
SELECT
band.id,
band.name,
album.*
FROM band
JOIN album ON band.id = album.band_id;
bandsOrderedByName:
SELECT *
FROM bandWithAlbum
ORDER BY name DESC;
bandsOrderedByAge:
SELECT *
FROM bandWithAlbum
ORDER BY age;
SQLDelight は、BandWithAlbum タイプを生成します。
続いて、ページネーションの例。
count:
SELECT count(*)
FROM bandWithAlbum;
paged:
SELECT *
FROM bandWithAlbum
LIMIT ?
OFFSET ?;
SQLDelight が生成するモデルは、data クラスなので、DiffUtil コールバックはすぐに書けます。
object BandItemCallback : ItemCallback<BandWithAlbum>() {
override fun areItemsTheSame(oldItem: BandWithAlbum, newItem: BandWithAlbum): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: BandWithAlbum, newItem: BandWithAlbum): Boolean {
return oldItem == newItem
}
}
また、enum クラスを使ったソートオプション。
enum class Sort { NAME, AGE }
fun bandsSorted(by: Sort): Flow<List<BandWithAlbum>> = when (by) {
NAME -> db.bandsOrderedByName()
AGE -> db.bandsOrderedByAge()
}.asFlow().mapToList()
逆に、これらのようなSQL処理をプログラムで実行すると効率は落ちます。
👉 The Resurgence of SQL (Droidcon NYC 2017) - Speaker Deck
欲しいタイプを View にすると、少ないコードで実現できます。
ユーザーの要求は、技術が発達するにつれてますます激しくなることは明らかです。良きユーザエクスペリエンスのための簡単な実装方法を常に把握しておくことが重要になります。