5
5

More than 3 years have passed since last update.

【Android】 キーボードのレイアウト押し上げ設定が反映されない。

Posted at

はじめに

「キーボードを出すとEditText下に配置しているviewが隠れて見えなくなっちゃう。」
っていうバグを直すのに、めちゃくちゃ時間かかった。
結局とても限定的な場面でだけ発生する事案だったんだけれど、ハマると全然気付けなさそうな原因だったので共有。

どんな状況?

EditTextの下に表示させている"0/1000"がキーボードで隠れているのがわかる。

これじゃ全くカウンターの意味がない。
キーボード表示中も見えるようにしておきたい。

調べると

めちゃくちゃ出てくる。

【参考】
https://qiita.com/bird_tummy/items/3709d607c4ec88ad9e71
http://furudate.hatenablog.com/entry/2013/07/10/012738
https://jiwashin.blogspot.com/2013/02/androideditview.html

詳しくは参考の記事を見て欲しいのだけれど、大まかにまとめるとやらなきゃいけないことは下記の2つ。
1. AndroidManifest.xmlの該当Activityにandroid:windowSoftInputMode="adjustResize"を設定する。
2. 該当ActivityのレイアウトのルートViewGroupにandroid:fitsSystemWindows="true"を設定する。

参考にして修正してみたのだけれど、依然直らず。
別に原因があるんじゃないかと考えた。

画面よくみてみると

もう一回キーボード出した時の画面をよく見てみる。

なんかToolbarも消えてない?
っていうかそれよりも、StatusBarが出てない。
画面下にばっか目がいってたけど、そこじゃない気がしてきた。

コード見てみると

この画面に行く前に、StatusBarを隠す処理を実行していた。

private fun hideStatusBar() {
    val imm = activity?.getSystemService(Cotnext.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(view?.windowtoken, InputMethodManager.HIDE_NOT_ALWAYS)
    view?.clearFocus()
}

試しにこの画面に入る時にStatusBarを出す処理を入れてみる。

private fun showStatusBar() {
    activity?.let {
        it.window.clearFlags(WindowManager.layoutParam.FLAG_FULLSCREEN)
        val decor = it.window.decorView
        decor.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_IMMERSIVE)
    }
}

すると

でた。
色がダサいのは気にしないで欲しい。

まとめ

  • EditText使う時にレイアウト下部に表示しとかなきゃいけないViewがある場合はキーボードで隠れていないか注意が必要。
  • AndroidManifest.xmlとレイアウトにキーボードの設定をしていても、StatusBarを隠す処理を入れていると設定が反映されない。

結局ちょっと深掘りして調べてみたけど、きちんとした原因まではわからなかった。
わかる人がいたら教えてほしい。

これにて一件落着。めでたし。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5