반응형
Webview를 연동시 일반적인 페이지 이동이 아닌 새창이 띄워져야 하는데 아무동작이 없어 당황 스러울때가 있습니다.
android에서는 새창으로 띄워지는 동작은 따로 처리가 필요합니다.
기본적으로는 위와같이 새창이 띄워져야 하는경우 WebChromeClien의 onCreateWindow함수가 호출 됩니다. 함수가 호출 되면 새창과 관련 동작을 추가 해주면 아무동작이 없어 당황스러운 상황은 쉽게 해결 됩니다.
웹뷰셋팅을 해줍니다.
웹페이지에서 새창을 띄우는 이벤트가 발생하여 onCreateWindow가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.
android에서는 새창으로 띄워지는 동작은 따로 처리가 필요합니다.
기본적으로는 위와같이 새창이 띄워져야 하는경우 WebChromeClien의 onCreateWindow함수가 호출 됩니다. 함수가 호출 되면 새창과 관련 동작을 추가 해주면 아무동작이 없어 당황스러운 상황은 쉽게 해결 됩니다.
webview = (WebView) findViewById(R.id.webview);
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportMultipleWindows(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
웹뷰셋팅을 해줍니다.
webview.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(final WebView view, boolean dialog,
boolean userGesture, Message resultMsg)
{
WebView newWebView = new WebView(MainActivity.this);
WebView.WebViewTransport transport
= (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(newWebView);
resultMsg.sendToTarget();
newWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setData(Uri.parse(url));
startActivity(browserIntent);
return true;
}
});
return true;
}
});
웹페이지에서 새창을 띄우는 이벤트가 발생하여 onCreateWindow가 호출 됩니다.
이소스에서의핵심은 새로운 웹뷰를 생성하고 새로운 웹뷰에서 페이지 이동처리를 해준다는 것입니다.
위의 소스는 새창을 외부 브라우저로 띄우는 소스입니다.
'Programming > Android' 카테고리의 다른 글
android Realm 데이터베이스 연동 하기(1) - 설정 (0) | 2020.04.17 |
---|---|
android 뒤로가기 두번으로 앱종료 하기 (0) | 2020.04.17 |
android 5.0 이상 웹뷰에서 파일 업로드 하기 (1) | 2020.04.17 |
[Android] 데이터바인딩으로 UI 효율적으로 활용 하기 (0) | 2020.04.16 |
안드로이드에서 당겨서 새로고침(SwipeRefreshLayout) 쉽게 구현하기 (0) | 2020.04.16 |