Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Jack 오답노트

인앱 웹뷰 dialog 버튼 안보임 본문

android

인앱 웹뷰 dialog 버튼 안보임

기릿 2022. 6. 28. 18:33

다크모드를 적용한 기기에서 인앱 웹뷰 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