はじめに
「キーボードを出すと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つ。
- AndroidManifest.xmlの該当Activityに
android:windowSoftInputMode="adjustResize"
を設定する。 - 該当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を隠す処理を入れていると設定が反映されない。
結局ちょっと深掘りして調べてみたけど、きちんとした原因まではわからなかった。
わかる人がいたら教えてほしい。
これにて一件落着。めでたし。