Jack 오답노트
인앱 웹뷰 dialog 버튼 안보임 본문
다크모드를 적용한 기기에서 인앱 웹뷰 dialog 가 뜨면 텍스트는 보이는데 버튼이 보이지 않는 현상이 있었다.
webChromeClient = object : WebChromeClient(){
// alert에서 확인, 취소버튼이 안보여서 따로 설정해 줌
override fun onJsConfirm(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this@WebViewActivity)
alertDialogBuilder.setTitle(url)
alertDialogBuilder.setMessage(message)
alertDialogBuilder.setPositiveButton("확인") { _, _ -> result!!.confirm() }
alertDialogBuilder.setNegativeButton("취소") { _, _ -> result!!.cancel() }
val alertDialog: AlertDialog = alertDialogBuilder.create()
alertDialog.setOnShowListener {
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(resources.getColor(R.color.color_seal_blue))
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(resources.getColor(R.color.color_seal_blue))
}
alertDialog.show()
return true
}
override fun onJsAlert(view: WebView?, url: String?, message: String?, result: JsResult?): Boolean {
val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this@WebViewActivity)
alertDialogBuilder.setTitle(url)
alertDialogBuilder.setMessage(message)
alertDialogBuilder.setPositiveButton("확인") { _, _ -> result!!.confirm() }
alertDialogBuilder.setNegativeButton("취소") { _, _ -> result!!.cancel() }
val alertDialog: AlertDialog = alertDialogBuilder.create()
alertDialog.setOnShowListener {
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(resources.getColor(R.color.color_seal_blue))
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(resources.getColor(R.color.color_seal_blue))
}
alertDialog.show()
return true
}
}
적용을 하고 테스트 하니 세팅한 색으로 잘 나온다.
그런데 바깥영역이나 백 버튼을 누르면 웹이 계속 dialog 응답을 기다린다고 얼어버린다.
그래서 onCancelListener를 추가해줬다. (코드를 좀 더 보기 좋게 수정했다)
val alertDialogBuilder: AlertDialog.Builder = AlertDialog.Builder(this@WebViewActivity).apply {
setTitle(url)
setMessage(message)
setPositiveButton("확인") { _, _ -> result!!.confirm() }
setNegativeButton("취소") { _, _ -> result!!.cancel() }
setOnCancelListener {
result!!.cancel()
it.dismiss()
}
setCancelable(true)
}
했더니 바깥 영역 터치, 백 버튼 눌러도 잘 됨
'android' 카테고리의 다른 글
Hilt 어노테이션 정리 (0) | 2023.06.20 |
---|---|
Camera Focus 관련 정리 (0) | 2022.10.19 |
Recyclerview 뷰 재사용으로 인한 사이즈 깨짐 (0) | 2021.12.09 |
databinding build 에러 (0) | 2021.11.16 |
Execution failed for task ':app:kaptDebugKotlin' (0) | 2021.10.06 |
Comments