Mobile/Android(JAVA)

[Android] WebView 세팅

김당 2023. 1. 24. 20:26

Android에서 웹뷰를 구현하기 위해서는 WebView 객체를 사용한다.

하지만 WebView 객체만으로는 화면을 보여줄 수 있을 뿐이며 웹뷰 안에서의 다른 기능(ex. 버튼) 들은 동작할 수 없다.

이러한 것들을 제어하기 위해 여러 설정들을 통해 웹뷰를 세팅할 수 있는데 그 방법에는 크게 3가지가 있다.

 

1. WebView Settings

: 웹뷰의 가장 큰 범주에서 웹뷰를 세팅한다.

private WebSettings webSettings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true); //자바스크립트 사용 여부
    webSettings.setSupportMultipleWindows(false); // 새창 띄우기 허용 여부
    webSettings.setJavaScriptCanOpenWindowsAutomatically(false); // 자바스크립트 새창 띄우기(멀티뷰) 허용 여부
    webSettings.setLoadWithOverviewMode(true); // 메타태그 허용 여부
    webSettings.setUseWideViewPort(true); // 화면 사이즈 맞추기 허용 여부
    webSettings.setSupportZoom(false); // 화면 줌 허용 여부
    webSettings.setBuiltInZoomControls(false); // 화면 확대 축소 허용 여부
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 컨텐츠 사이즈 맞추기
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 브라우저 캐시 허용 여부
    webSettings.setDomStorageEnabled(true); // 로컬저장소 허용 여부
}

 

 

2. WebViewClient

: 웹페이지 로딩시 생기는 콜백함수들로 구성되어 있어 웹페이지 로딩의 시작과 끝을 알 수 있다.

 

  2-1. 자주 사용되는 오버라이드 함수

 

함수명 반환 호출시점 설명
onPageStarted void 페이지가 로딩되는 첫 시점에 한번 호출된다.  
shouldOverrideUrlLoading boolean 웹뷰에서 url이 로딩될 때 호출되어 앱에게 제어할 기회를 준다. (사용자 이벤트로 새로운 url이 로딩될 때 ) 앱이 url로딩을 제어할 경우 true, 아니라면 default로 fault 반환
onPageFinished void 페이지 로딩이 끝나면 호출된다.  

 

 

3. WebChromeClient

: 웹페이지에서 일어나는 콜백함수들로 구성되어 있다. (ex. 새 창 띄우기, 파일 첨부)

 

  3-1. 자주 사용되는 오버라이드 함수

 

함수명 반환 호출시점 설명
onProgressChanged void 페이지가 로딩되는 중간중간 호출된다. 현재 로딩되는 페이지의 상태를 알려준다.
onCreateWindow boolean 웹에서 새 창을 열 때 호출된다. (window.open() 사용 시) 앱이 새 창을 여는 작업을 하면 true, 그게 아니면 default로 false 반환
onCloseWindow void 웹뷰가 창을 닫을 때 호출된다.  

 

 

4. WebView 호출 flow

 

 

*참고자료

https://kimdabang.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-WebViewClient%EC%99%80-WebChromeClient