史上初のスマホ老人時代に向けての老眼対策 4つの文字拡大設定

たいそうなタイトルですが、

実際、人類初ですよね、スマホの登場からして。

「すでに、ワシは5インチのスマホでは老眼で文字が読めないがのぅ。」

そんなわれらスマホジジイのための拡大系設定が4つあるようです。

拡大操作 - Android Accessibility ヘルプ

実際にAndroid Pie で確認してみます。

4つの拡大方法のうち、どれが使いやすいでしょうか。

1. フォントサイズの変更

フォントサイズを変更します。

1. 端末の設定アプリを開きます。
2. [ユーザー補助]、[フォントサイズ] をタップします。
3. スライダーを使って、希望するフォントサイズを選択します。

フォントサイズの設定は、Google Chrome アプリには適用されません。Chrome アプリでは独自に文字のサイズを管理しています。

小・デフォルト・大・最大の4段階。
アプリによっては、レイアウトが壊れたりします。

2. 表示サイズの変更

画面上に表示されているアイテムのサイズを変更します。

1. 端末の設定アプリを開きます。
2. [ユーザー補助]、[表示サイズ] をタップします。
3. スライダーを使って、希望する表示サイズを選択します。

小・デフォルト・大・特大・最大 の5段階。
フォントとコンテンツレイアウトが同時に拡大・縮小されますのでレイアウト崩れが少ない雰囲気です。

3. トリプルタップで拡大

1. 端末の設定アプリ 設定 を起動します。
2. [ユーザー補助]、[拡大] を開きます。
3. [トリプルタップで拡大] を選択します。

A. ズームインですべてを拡大する
1. 画面(キーボードとナビゲーション バー以外の場所)をトリプルタップします。
2. パン操作を行ったり、ズームレベルを調整したりできるようになります。
- パン操作を行うには、2 本以上の指で画面上をドラッグします。
- ズームレベルを調整するには、2 本以上の指をつまむように近づけたり(ピンチイン)、離して広げたり(ズームアウト)します。
3. 画面をトリプルタップすると、ズームアウトします。

B. 画面を一時的に拡大する
1. 画面(キーボードとナビゲーション バー以外の場所)をトリプルタップして押し続けます。
2. 拡大した領域を移動するには、指で画面上をドラッグします。
3. 拡大を停止するには、指を離します。

トリプルタップが意外に面倒。誤操作も発生したり。

4. ボタンで拡大

1. 端末の設定アプリ 設定 を起動します。
2. [ユーザー補助]、[拡大] を開きます。
3. [ボタンで拡大] を選択します。

A. ズームインですべてを拡大する
1. ユーザー補助機能アイコン をタップします。
2. 画面(キーボードとナビゲーション バー以外の場所)をタップします。
3. パン操作を行ったり、ズームレベルを調整したりできるようになります。
- パン操作を行うには、2 本以上の指で画面上をドラッグします。
- ズームレベルを調整するには、2 本以上の指をつまむように近づけたり(ピンチイン)、離して広げたり(ズームアウト)します。
4. ユーザー補助機能アイコン をタップすると、ズームアウトします。

B. 画面を一時的に拡大する
1. ユーザー補助機能アイコン をタップします。
2. 画面(キーボードとナビゲーション バー以外の場所)をタップして押し続けます。
3. 拡大した領域を移動するには、指で画面上をドラッグします。
4. 拡大を停止するには、指を離します。

直感的に操作ができる気がする。指を離すと拡大が終了する一時的な、のがフツーに使いやすそう。

まとめ

現在のAndroidで文字を拡大する設定は、すべて、

「設定」-「ユーザー補助」

から。


   設定
    ┣ ユーザー補助
        ┣ フォントサイズ (1)
        ┣ 表示サイズ (2)
        ┣ 拡大
            ┣ トリプルタップで拡大 (3)
            ┗ ボタンで拡大 (4)

4つ設定を組み合わせて使うことができるようですが、逆にややこしいか。

私は、まずは「ボタンで拡大」を使っていこうと思います。

とはいえ、アマゾンランキングで人気の老眼鏡でも買ったほうが良くね?




Gboard 日本語 12キー 左右のカーソルキーを使ってすばやく上下移動する方法

今まで、左右にしか動かなったカーソルキーが上下方向にジェスチャー(スワイプ)することで、縦方向にも移動できるようになっています。



英語キーボードのスペースキーのジェスチャー機能(左右のみ)に続いて、日本語12キーもすばやくカーソル移動できるようになりました。

まだまだ、この先の機能改善も期待できそうです。

Gboard - the Google Keyboard - Apps on Google Play


Androidアプリのアニメーションは必要?

なんとなくスマホイライラの原因の一つではないか、と思う。

More users like to turn off animations than you think.
予想以上にアニメーションOFFは好かれている。

Is it reasonable to assume your app's users have their developer options turned off? : androiddev

そんなあなたはOFFにしましょう。

スッキリしてサクサクします。

「開発者向けオプション(デベロッパーモード)」の有効化が必要ですが、開発者でない人も便利に利用できます。

android デベロッパーモード - Google 検索

有効化したら、その中で3つのアニメーションをOFFにするだけです。

ね、スッキリするでしょう?

どうせ待つなら滑らかアニメーションがあったほうがいいか。


スマホのバッテリーを交換する

数年後、ほぼバッテリーが膨らんできたり、充電の雰囲気がおかしくなりますよね。

普通に使っている限り、最初に壊れるのはバッテリー周りからではないでしょうか。

自分で交換したくなりますよね、カメラやCPUなど他は全く問題ないのですから。

ベンダーやキャリアのOSのアップデートが終了したとしても、Lineage で更新していきましょう。

LineageOS – LineageOS Android Distribution

Android 端末は、いろんなことができるパソコンレベルの能力を持ったデバイスなのですから。

道具

4-5台交換してきましたが、以下は必須と思われます。

- 精密機器用のドライバーのセット
- プラスチックのヘラ

スマホをばらすには六角の形状のドライバーが必要。



あと、内部の固定に両面テープが使われてること多いですので、基盤など傷つけない薄いヘラが必要になります。

数枚あると、差し込んだままゆっくり剥がしていくことができます。

あと、私はこれが欲しい気はしています。




iOpenerの利用方法 - iFixit Repair Guide


なくてもいまのところはいけてますが欲しい小道具ではあります。

動画を見る

新端末のローンチと同時に不必要なバッテリー交換だけでなく、リペア系の動画をアップする人や企業はたくさんいます。

手順だけでなく、自分の手先の器用さや必要工具の有無など間違いなく見て置いたほうがいいでしょう。


Android Repair - iFixit

Battery Replacement - Android Forums at AndroidCentral.com

バッテリー交換のために、分解するとこ、しないとこをはっきり見極めておく必要があります。

私は、配線を引きちぎってしまい 非接触充電 (Qiなど) が利用できななくなったことがあります。

バッテリーを探す

購入できるその端末のバッテリーを探します。

Cell Phone Replacement Batteries | Amazon.com

Amazon.co.uk: replace - Batteries / Accessories: Electronics & Photo

海外のサイトでは、安く購入できますが、基本、バッテリーの海外からの輸入は制限されている雰囲気です。

ヤフオク、メルカリ、アマゾン日本 などがいいでしょう。
大体、2000円くらいでしょうか。



初回は、道具付のセットがいいかもしれません。

作業する

動画や手順サイトをみながら、思い切って行きましょう、どっちみち捨てる運命だった端末です。

ネジ山を潰したときのしょんぼり感は格別でしたが、次の動画をヒントにゴムの代わりのセロテープで乗り切ることができました。



そんな、Nexus6 のバッテリー交換の風景です。



まとめ

実際は、古い端末を活かしたとしても、いまどきのアプリの負荷に能力が耐えられず、イライラが爆発するのは、Android OS 5.x をベースとした Amazon Kindle HD のモッサリ動作を経験した方なら想像できるでしょう。

しかし、貧乏性の私たちは、「使わないが使える物」を捨てることができません。


最小限 の Kotlin を最短で学ぶ

最小限 の Kotlin を最短で学ぶ

シンプルな記事あったので。

Learn Kotlin for Android in One Day – Mayur Rokade – Medium

1. 変数

変数は「var」。


var username: String = "some user name"

定数は「val」。Java の final と等価。


val API_DELAY_CONSTANT: Int = 100

null で初期化するには「?」。 null を利用可能にします。


var myString: String? = null

static な定数には「companion object」。


class Animal {

    companion object {
        const val DEFAULT_NUM_OF_EYES = 2
    }
}

animal.numOfEyes = Animal.DEFAULT_NUM_OF_EYES

遅れて初期化するには「lateinit」。


lateinit var user: User
lateinit var items: List<String>

2. 関数

これは、public。Int を返します。


fun getNumber(): Int {
    return 1
}

private で引数を渡す場合。


private fun getStringLength(str1: String, str2: String): Int {
    return str1.length + str2.length
}

static 関数。


class MyStringUtil {

    companion object {
        fun getOddLengthString(str: String): String? {
            if (str.length % 2 == 0) return null

            return str
        }
    }
}
var str: String = MyStringUtil.getOddLengthString("hey")

「?」を使って、null を返すことをコンパイラに伝えています。

3. ループ と when

コレクションである items に「in」で。


var items: List<String> = ArrayList<String>()

for (item in items) {
    // do something with item
}

インデックスにアクセスすることもできる。


for (index in items.indices) {
    // access items using index
    // items.get(index)
}

Java の switch は、Kotlin では「when」。


// A cool example of when statement
fun describe(obj: Any): String? {
    var res: String? = null

    when (obj) {
        1 -> { res = "One" }         // if obj == 1
        "Hello" -> res ="Greeting"  // if obj == "Hello"
        is Long -> "Long"            // if obj is of type Long
        !is String -> "Not string"   // if obj is not of type String
        else -> {
            // execute this block of code
        }
    }

    return res
}

4. Null 安全

Java で NPE を避ける場合。if で。


if (person != null && person.department != null) {
    person.department.head = managersPool.getManager()
}

Kotlin では「?」を使って、if を省くことができる。chain可能。


person?.department?.head = managersPool.getManager()

null の場合を処理したいときは「?:」を使う。


var name = person?.name ?: throw InvalidDataException("Person cannot be null.")

5. クラス

「open」で継承可能。なければ, Java の final class と同じ。


open class Animal {
    // This class is open and
    // can be inherited
}

class Dog : Animal() {  // Notice the paranthesis
    // Class dog is final and
    // can't be inherited
}

// Compiler throws error
class Labrador : Dog {

}

6. シングルトン

「object」を使う。


object Singleton {
    var name: String = "singleton object"

    fun printName() {
        println(name)
    }
}

// later in the code
Singleton.name
Singleton.printName()

7. インターフェース

インターフェースの継承は直感的に。


interface Named {
    fun bar()
}

interface Person : Named { // Person inherits Named
    fun foo()
}

class Employee() : Person {
    override fun bar() {
        // do something
    }

    override fun foo() {
        // do something
    }
}

関数に渡す場合は少し違う。


// A function that accepts and interface as a parameter
private fun setOnClickListener(listener: View.OnClickListener) {
    // do something
}

// Passing an interface to the function
setOnClickListener(object : View.OnClickListener{
    override fun onClick(view: View?) {
        // do something
    }
})

8. 型チェックとキャスト

「is」や「!is」を使う。


if (obj is String) {
    print(obj.length)
}

if (obj !is String) {
    print("Not a String")
}

「as?」を使って例外を避けてキャスト可能。失敗時には null を返す。


val x: String? = y as? String

9. 例外

Java とほぼ同じ。


throw Exception("Hi There!")

try {
    // some code
}
catch (e: SomeException) {
    // handler
}
finally {
    // optional finally block
}

まとめ

重要な最小限の部分からきちんと学んでいくこと大事。

- Kotlin で FizzBuzz
- 「Fragment を利用するか、しないか」という話