【Android】 키보드의 레이아웃 푸시 설정이 반영되지 않는다.

소개



"키보드를 내면 EditText 아래에 배치하고 있는 view가 숨어 보이지 않게 된다."
라고 하는 버그를 고치는데, 엄청 시간이 걸렸다.
결국 매우 한정적인 장면에서만 발생하는 사안이었지만, 빠지면 전혀 눈치채지 않을 것 같은 원인이었으므로 공유.

어떤 상황?



EditText 아래에 표시하고 있는 "0/1000"이 키보드로 숨어 있는 것을 알 수 있다.



이것은 전혀 카운터의 의미가 없다.
키보드 표시 중에도 보이도록 해두고 싶다.

조사하면



엄청 나온다.

【참고】
h tps:// 퀵했다. 작은 m/미 rd_ 낚시 my/있어 MS/3709d607C4 그림 c88 아 d9 그림 71
h tp : // 체로. 하테나 bぉg. 코m/엔트리/2013/07/10/012738
h tps://지와신. bgs포 t. 이 m/2013/02/안 d로이로ぢtゔぃ에w. 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를 숨기는 처리를 넣고 있으면 설정이 반영되지 않는다.

  • 결국 조금 깊이 파고 조사해 보았지만, 제대로 된 원인까지는 몰랐다.
    아는 사람이 있으면 가르쳐 주었으면 한다.

    이것으로 일건 낙착. 만나서.

    좋은 웹페이지 즐겨찾기