하이브리드 앱을 위해 현재 제가 사용하고 있는 안드로이드 웹뷰(WebView)의 주요 셋팅을 공유하고자 합니다!
저는 웹뷰를 공통으로 사용하기 위해 "CommonWebView"라는 이름으로 커스텀 웹뷰를 만들어서 사용하고 있습니다. ^^
바로 보시죠!
class CommonWebView(context: Context, attrs: AttributeSet?, defStyle: Int) : WebView(context, attrs, defStyle) {
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
init {
with(settings) {
userAgentString += "Android_inApp" //UserAgent 설정
javaScriptEnabled = true //자바스크립트 사용 설정
javaScriptCanOpenWindowsAutomatically = true //window.open() 동작 설정
useWideViewPort = true //wide viewport 사용 설정
loadWithOverviewMode = true //컨텐츠가 웹뷰보다 클 때, 스크린 크기에 맞추기
builtInZoomControls = false //줌 컨트롤 사용 여부 설정
cacheMode = WebSettings.LOAD_NO_CACHE //캐시 설정
setAppCacheEnabled(false) //앱 내부 캐시 사용 여부 설정
domStorageEnabled = true //로컬 스토리지, 세션 스토리지 사용 여부 설정
allowFileAccess = true //파일 접근 허용 설정
defaultTextEncodingName = "UTF-8" //인코딩 설정
setSupportMultipleWindows(true) //멀티윈도우 지원 여부 설정
databaseEnabled = true //Database Storage API 사용 여부 설정
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW //https, http 호환 여부(https에서 http컨텐츠도 보여질수 있도록 함)
}
}
webViewClient = CommonWebViewClient()
webChromeClient = WebChromeClient()
}
private var mWebViewListener: WebViewListener? = null
fun setWebViewListener(webViewListener: WebViewListener) {
mWebViewListener = webViewListener
}
inner class CommonWebViewClient : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
mWebViewListener?.onPageStarted(url, favicon)
}
override fun onPageFinished(view: WebView?, url: String?) {
mWebViewListener?.onPageFinished(url)
super.onPageFinished(view, url)
}
override fun onLoadResource(view: WebView?, url: String?) {
super.onLoadResource(view, url)
mWebViewListener?.onLoadResource(url)
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
mWebViewListener?.shouldOverrideUrlLoading(request)
return super.shouldOverrideUrlLoading(view, request)
}
override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
super.onReceivedError(view, request, error)
mWebViewListener?.onReceivedError(request, error)
}
}
interface WebViewListener {
fun onPageStarted(url: String?, favicon: Bitmap?)
fun onPageFinished(url: String?)
fun onLoadResource(url: String?)
fun shouldOverrideUrlLoading(request: WebResourceRequest?)
fun onReceivedError(request: WebResourceRequest?, error: WebResourceError?)
}
}
잊지 않으셨죠?
퍼미션 추가
AndroidManifest.xml에 인터넷 사용을 위한 "android.permission.INTERNET" 퍼미션을 추가해주세요!
<uses-permission android:name="android.permission.INTERNET"/>
'안드로이드 기술 공유' 카테고리의 다른 글
간편하게 Retrofit 쿠키 유지하기! (0) | 2021.05.18 |
---|---|
Dagger Hilt로 안드로이드 의존성 주입하기 (0) | 2021.04.04 |
Retrofit으로 SSL 인증서 없이 HTTPS 우회 접속 통신하기! (0) | 2021.02.22 |
프로답게 UI 디자인 가이드 요청하기! (6) | 2020.04.24 |
초간단! 안드로이드 WiFi로 ADB 연결하기! (간편한 플러그인 사용) (0) | 2020.04.07 |