프로그램/Android

안드로이드 웹뷰 셋팅[Webview Setting]

잡식성초보 2017. 9. 6. 10:00

안드로이드 Webview 대해 알아 보도록하겠습니다.


요즘 모바일 추세는 하이브리드앱이 대세입니다. 워낙 HTML5 안되는게 없다보니


굳이 앱업데이트 없이 UI변경이 어느정도 가능하도록 기업들은 하이브리드앱을 원합니다.


네이티브에 비해 단가가 싸기도 하고요


안드로이드에서 웹뷰를 생성할 경우에는 공통으로 사용할수 있는 웹뷰를 생성하여 줍니다.


간단한 프로젝트면 모르겠지만 조금 규모가 있는 프로젝트는 MainActivity Webview 한번만 


생성하고 끝내는일이 거의 없기 떄문이죠. 안드로이드 웹뷰를 만들기 위해서는 웹뷰를 어느정도 셋팅을 해줘야 하는데요.


보통 제가 프로젝트를 생성할때 셋팅하는 방법을 코드입니다. 코드 주석에도 설명을 써놧지만 listener 사용하여 데이터를 Activity등에서 처리할수 있도록 하였습니다. 




public class CommonWebview2 extends WebView { private final String TAG = "CommonWebview2"; private Context mContext; protected onWebEventListener listener; //listener는 다른 Activity에서 데이터를 넘겨받아 사용할수 있도록 하기 위한 작업 public interface onWebEventListener { public void onPageStarted(String url); public void shouldOverrideUrlLoading(String url); public void onPageFinished(String url); public void onReceivedError(WebResourceError error); } public void setOnWebEventListener(onWebEventListener l) { listener = l; } public CommonWebview2(Context context) { super(context); mContext = context; } public CommonWebview2(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; try { initView(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } } private void initView() throws PackageManager.NameNotFoundException { WebSettings set = getSettings(); set.setUserAgentString(set.getUserAgentString() + "/APP_SWC_Android/Version=데이터/UDID=데이터" ); //안드로이드 UserAgent Setting set.setJavaScriptEnabled(true); // javascript를 실행할 수 있도록 설정 set.setGeolocationEnabled(true); // GeoLocation를 사용하도록 설정 set.setUseWideViewPort(true); // wide viewport를 사용하도록 설정 set.setSaveFormData(false); // webview 자동완성 기능 사용안함 set.setJavaScriptCanOpenWindowsAutomatically(false); set.setSupportMultipleWindows(false); set.setDatabaseEnabled(true); set.setDomStorageEnabled(true); set.setLoadsImagesAutomatically(true); // set.setCacheMode(WebSettings.LOAD_NO_CACHE); setHorizontalScrollBarEnabled(false); setVerticalScrollBarEnabled(false); setInitialScale(100);                                         //가로 고정 setWebChromeClient(new WebviewCromClient()); setWebViewClient(new WebviewClient()); } private class WebviewCromClient extends WebChromeClient { @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } } private class WebviewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //보통 웹에서 SCHEME를 넘길경우 이 함수로 처리를한다. listener.shouldOverrideUrlLoading(url); return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); listener.onPageStarted(url); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); listener.onPageFinished(url); } @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); listener.onReceivedError(error); } }


반응형