Android 端末 キーボード切り替え方法あれこれ

 

なんとなくやっているけどイライラすることありません?

 

[準備] キーボードの有効化/無効化

プレインストールアプリなどいくつかのキーボードアプリがインストールされていると思います。

端末の設定から、インストールしたキーボードアプリを「有効化」しておけばキーボード入力中に素早く簡単に切り替えられるようになります。


「設定」

  ↓

「一般管理」

  ↓

「言語とキーボード」

  ↓

「オンスクリーンキーボード」

  ↓

「キーボードを管理」

使わないキーボードアプリはOFFにして「無効化」しておくと選択時に煩わしくありません。

ここをきちんと設定しておくことで、切り替えの動作がわかりやすくなりますので大事な設定です。

 

A. Android機能の「キーボード(切り替え)ボタン」を使う

Androidの機能なので、キーボードアプリにかかわらず入力中に切り替えができます。

Android機能の「キーボード(切り替え)ボタン」を使う

Android機能の「キーボード(切り替え)ボタン」を使う

 

B. キーボード上でスペースキーの長押し

スペースキーを長押しすることでキーボード選択のダイアログが表示されて切り替えることができるようになります。

動画では、「Google日本語入力」と「Gboard」で切り替えていますが、同じGoogle製ということで、UIが似ているために切り替えたかどうかが分かりづらいです。

この方法は、スペースキーを押すキーボードアプリに依存します。

 

C. キーボード上で多言語(地球マーク)ボタンのタップ/長押し

タップで同言語対応キーボードの中での切り替え、

長押しで、キーボード切り替えダイアログの表示となります。

キーボード上で多言語(地球マーク)ボタンのタップ/長押し

この方法は、利用してるキーボードアプリに依存します。

 

まとめ

今回は、「Google日本語キーボード」や、「Google Gboard」で説明していますが、他のキーボードアプリでは切り替えをしづらくなっているものもありますので、OS機能を利用した「1」の方法であれば、どのキーボードアプリでも切り替えやすいと思われます。

もうひとつ「英数切り替え」も以下から。

👉 【Gboard】QWERTYキーが3種類あってはまる件【日本語入力】 
→ 入力文字の 日本語 と 英数記号 切り替えをシンプルにする設定

あと、アプリの最速な切替方法など (動画/Android Pie版 あり)。

→ アプリをすばやく切り替える方法

👉 【Android11】スクショ 
👉 【Android Pie】2画面表示(分割画面)の方法 
👉 初めての Gboard キーボードのレイアウト設定 


Admob firebase-ads:15.0.1 でメモリーリークする

なんか以前からよくリークしてましたよね、Admob。

今回は, 以下バージョン。


implementation "com.google.firebase:firebase-core:15.0.2"
implementation "com.google.firebase:firebase-ads:15.0.1"

Activity#finish()後、

百発百中でLeakCanaryが鳴く。

情報はないか、と探すが古いものばかり。

最新の公式サンプルを見る。

BannerExamples

advanced-APIDemo

BannerRecyclerViewExample

AndroidManifest.xmlの「INTERNET」関連の2行はもう不要だったり。

サンプル通りライフサイクル周り記述しても消えやしない。

百発百中でアウトでござる。


// Called when leaving the activity
public override fun onPause() {
    ad_view.pause()
    super.onPause()
}

// Called when returning to the activity
public override fun onResume() {
    super.onResume()
    ad_view.resume()
}

// Called before the activity is destroyed
public override fun onDestroy() {
    ad_view.destroy()
    super.onDestroy()
}

公式サンプルの中に以下を見つけた。


if (adView.getParent() != null) {
  ((ViewGroup) adView.getParent()).removeView(adView);
}

RecyclerViewAdapter.java#L146-L148

ぶら下がったままだった模様。

以下で完。


inline fun AdView.remove() {
  if (parent != null) {
    (parent as ViewGroup).removeView(this)
  }
}

最初のライフサイクル周りは、

公式マニュアル通り不要だったりしたが。


【Android Oreo】「Picture in Picture」は進化中?!

サンプル見てましたが。

android-PictureInPicture/README.md at master · googlesamples/android-PictureInPicture

...。

ただ、縮小されたActivityを常駐的に端末画面の上に載せたいだけなのですが...。

 

最小限の実装

BlankActivityで実装するだけ。

これぐらいまで。

AndroidManifest.xml


<activity android:name=".MainActivity"
    android:resizeableActivity="true"
    android:supportsPictureInPicture="true"
    android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation">

MainActivity.kt


class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    if (VERSION.SDK_INT >= VERSION_CODES.O) {
      text.setOnClickListener {
        val params = PictureInPictureParams.Builder().apply {
          setAspectRatio(Rational(4, 3))
        }.build()
        enterPictureInPictureMode(params)
      }
    }
  }

  override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean,
      newConfig: Configuration) {
    super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
    if (isInPictureInPictureMode) {
      text.text = "small"
      setFullScreen(true)
    } else {
      text.text = "normal"
      setFullScreen(false)
    }
  }

  private fun setFullScreen(on: Boolean) {
    window.decorView.systemUiVisibility = if (on) {
      SYSTEM_UI_FLAG_LAYOUT_STABLE or
      SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
      SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
      SYSTEM_UI_FLAG_HIDE_NAVIGATION or
      SYSTEM_UI_FLAG_FULLSCREEN or
      SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    } else {
      SYSTEM_UI_FLAG_LAYOUT_STABLE
    }
  }

}

PinPモードに入ったときのレイアウト変更は、フルスクリーンモードでツールバーを隠すのみ。

Preview 公開当時のサンプルが多いので、今現在の最小限実装でやってみたメモ的な。

関連APIは変化している様子。


Gradle Dependency バージョンのチェックを「最新」に更新する方法

便利そうなのでました!

Android Developers Blog: Announcing new SDK versioning in Google Play services and Firebase

com.google.android.gms:play-services-*
com.google.firebase:firebase-*

に関しては、それぞれが独立したバージョンで記述してよい。

なので、以下のような「バージョンをを揃える」記述は不要。


buildscript {
    ext {
        play_version = '15.0.0'
    }
}

dependencies {
    // DON'T DO THIS!!
    // The following use of the above buildscript property is no longer valid.
    implementation "com.google.android.gms:play-services-auth:${play_version}"
    implementation "com.google.firebase:firebase-auth:${play_version}"
    implementation "com.google.firebase:firebase-firestore:${play_version}"
}

利用方法は以下2パターン。


classpath 'com.google.gms:google-services:3.3.0'

// 最終行
apply plugin: 'com.google.gms.google-services' 

かまたは、


classpath 'com.google.android.gms:strict-version-matcher-plugin:1.0.0'

// 最終行
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

とのこと。

 

やってみたが...

エラー。

ビルドできず。


The library com.google.android.gms:play-services-measurement-base
is being requested by various other libraries at [[15.0.0,15.0.0], [15.0.2,15.0.2]],
but resolves to 15.0.2. Disable the plugin and check your dependencies tree
using ./gradlew :app:dependencies.

記述にはない「play-services-measurement-base」が

内部的に呼ばれてこけている。

メッセージに書いてある


./gradlew :app:dependencies

は実行すらできない。

それぞれは、Andrid Studioの自動チェックで最新のはずなのだが。

 

それぞれのバージョンを確認してみる

目視でGoogleリポジトリを確認。

Google's Maven Repository

AndroidStudioの自動チェックで最新版の「15.0.0」だと思っていたが

実は、古いバージョンのままだった。

実際は「15.0.2」が最新。

これに書き換えたらいけた。

しかし、AndroidStudioの自動最新バージョンチェック機能らしきは、

機能してなくね?

かまたは、微妙に古くね?

 

Lint「Newer Library Versions Available」 を確認する

「Preference」-「Editor」-「Inspections」 にある

「Lint」-「Newer Library Versions Available」

OFFになってるが。

Description
Newer Library Versions Available This detector checks with a central repository to see if there are newer versions available for the dependencies used by this project. This is similar to the GradleDependency check, which checks for newer versions available in the Android SDK tools and libraries, but this works with any MavenCentral dependency, and connects to the library every time, which makes it more flexible but also much slower.

「毎回チェックするのでとろい」ということで

デフォルトでOFFになっているのか。

毎回でなく適時、意図的に実行したい場合は、

「Analyze」-「Run Inspection by Name」からいきましょう。

 

グレーのハイライトと同時にツールチップで最新版である

「15.0.2」

をサジェストしてくれました!

【Android Studio】ビルド環境を安定した最新バージョンにする


入力文字の 日本語 と 英数記号 切り替えをシンプルにする設定

もうこれずっと気にはかかってたのだけども、

思い通りにできるようなできないような。

なんとなく偶然でボタンを押しながら切り替えてました。

なので、スムーズにいくはずもなく、長文だとイライラしてくる。

今回、Google「Gboard」が日本語対応しているということで、

それに乗り換えるついでに、

少し整理して解決しておこうと思いました。

Gboard - the Google Keyboard - Apps on Google Play

Gboardの「言語切り替えキー」をフル活用して、

結果、以下でいいんじゃね的なとりあえずまとめ。

 

OS側の設定

Android端末自体の設定です。

切り替えをスムーズに行うために

不要なキーボードアプリはOFFにしておくとよいです。

「設定」-「言語と入力」-「仮想キーボード」-「キーボードを管理」

というかアンインストールすればさらにスッキリするっちゃあする。

あと、「入力方法の選択のアイコン」もOFFにしておく。

「設定」-「言語と入力」-「入力方法選択のアイコン」

これは、キーボードアプリの切り替えのためのものだが、

Gboardの「言語切り替えキー」とダブる。

 

Gboard側の設定

Gboardは多言語で複数の種類のキーボード形式を同梱しています。

私の場合は、

日本語 - 12キー(フリック)
英数記号 - qwertyキー

で入力したいのでそれに合わせて設定します。

「Gboard」-「設定」-「言語」

あと、「言語切り替えキーを表示」をONにしておきます。

「Gboard」-「設定」-「設定」

 

使い方

日本語と英数記号のキーボード切り替えは

すべて地球マークの「言語切り替えキー」で行います。

また、他のキーボードアプリを利用したい場合も

OS側の設定で有効にしておけばこれで切り替えできます。

これで意図通りに切り替えることができます。

地球マークを押せば

日本語と英数記号のキーボードを

行ったり来たりできます。

地球マークが表示されないときは、記号やテンキーモードなので

左下のそれらしいキーを押してみましょう。

 

設定変更以外に「長押し」は必要ありません。

混乱します。

 

まとめ?

「キーボード自体」の切り替えについては以下。
→ Android 端末 キーボード切り替え方法あれこれ

言語切り替えキーのみで日-英数記号キーボード切り替え

切り替えに長押しは不要

最近のスマホやアプリはもうややこしすぎて嫌になります。

不要な機能はガンガンOFFにしてみましょう!

「捨てる能力」大事です。

あの Jake Wharton さんが伝授する Android Studio を高速化する方法

顔文字パック キーボード - Google Play のアプリ

追記 2019-11-25

今となっては以下が有効です。

👉 【Gboard】QWERTYキーが3種類あってはまる件【日本語入力】 

12キーの日本語入力に加えて、英数文字はグライド入力を使って、快速に文字入力していきましょう!!