1. ホーム
  2. アンドロイド

[解決済み】Androidで "仮想キーボードの表示/非表示 "イベントをキャプチャする方法は?

2022-04-02 21:28:15

質問

バーチャルキーボードが表示されているかどうかでレイアウトを変えたいのですが、どうすればいいですか?APIや様々なブログで検索してみましたが、なかなか有用なものが見つかりません。

可能でしょうか?

ありがとうございます。

解決方法は?

2020年最新情報

これが可能になったのです。

Android 11では、以下のことが可能です。

view.setWindowInsetsAnimationCallback(object : WindowInsetsAnimation.Callback {
    override fun onEnd(animation: WindowInsetsAnimation) {
        super.onEnd(animation)
        val showingKeyboard = view.rootWindowInsets.isVisible(WindowInsets.Type.ime())
        // now use the boolean for something
    }
})

また、キーボードの表示/非表示のアニメーションを聞いて、それに対応したトランジションを行うことも可能です。

を読むことをお勧めします。 Android 11 プレビュー と、それに対応する ドキュメント

Android 11以前

ただし、本作品では Compat のバージョンでは、ハックに頼る必要があります。

ウィンドウのインセットを取得し、下のインセットが(実験によって)合理的に良いと思われるある値よりも大きい場合、キーボードを表示しているとみなすことができます。これはあまり良い方法ではなく、場合によっては失敗する可能性もありますが、フレームワークのサポートはありません。

この質問に対する良い回答はこちらです。 https://stackoverflow.com/a/36259261/372076 . また、Android 11以前のバージョンでこれを実現するためのさまざまな方法を紹介しているページもあります。

https://developer.salesforce.com/docs/atlas.en-us.noversion.service_sdk_android.meta/service_sdk_android/android_detecting_keyboard.htm


備考

この解決策は、ソフトキーボードおよび onConfigurationChanged はソフト (仮想) では呼び出されません。 キーボード


設定変更に自分で対応する必要がある。

http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange

サンプルです。

// from the link above
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    
    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
    }
}

そして、いくつかのビューの可視性を変更し、フィールドを更新し、レイアウトファイルを変更するだけです。