답변:
를 사용하는 WebView
경우 기본 Android 동작을 원하지 않으면 클릭을 직접 가로 채야합니다.
를 WebView
사용하여 이벤트를 모니터링 할 수 있습니다 WebViewClient
. 원하는 방법은 shouldOverrideUrlLoading()
입니다. 이를 통해 특정 URL을 선택할 때 자신의 작업을 수행 할 수 있습니다.
당신은 설정 WebViewClient
당신이의 WebView
사용 setWebViewClient()
방법 .
WebView
SDK 에서 샘플 을 보면 원하는 것을 수행하는 예제가 있습니다. 다음과 같이 간단합니다.
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
경우에 따라 URL로드 방법을 트리거하지 않는 리디렉션을 받으면 onLoadResource를 재정의해야 할 수도 있습니다. 이 경우 다음을 시도했습니다.
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
공식 문서에 따르면 WebView에서 링크를 클릭하면 URL을 처리하는 응용 프로그램이 시작됩니다. 이 기본 동작을 재정의해야합니다.
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
또는 메소드에 조건부 논리가 없으면 간단히 다음을 수행하십시오.
myWebView.setWebViewClient(new WebViewClient());
이 메소드 boolean shouldOverrideUrlLoading(WebView view, String url)
는 API 24에서 더 이상 사용되지 않습니다. 새 장치를 지원하는 경우을 사용해야합니다 boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
.
다음과 같이하면 둘 다 사용할 수 있습니다.
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
Arulx Z의 대답은 내가 찾던 것과 정확히 일치했습니다.
하이퍼 링크를 클릭하지 않고도 앱 내부에서 웹 탐색을 유지하기 위해 recyclerview 및 webviews가있는 Navigation Drawer로 앱을 작성 중입니다 (따라서 외부 웹 브라우저를 시작하지 않음). 이를 위해 다음 두 줄의 코드를 입력하면 충분합니다.
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
정확히 WebView 문 아래에 있습니다.
구현 된 WebView 코드의 예는 다음과 같습니다.
public class WebView1 extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView wv = (WebView) findViewById(R.id.wv1); //webview statement
wv.setWebViewClient(new WebViewClient()); //the lines of code added
wv.setWebChromeClient(new WebChromeClient()); //same as above
wv.loadUrl("http://www.google.com");
}}
이렇게하면 웹 사이트에서 클릭 한 모든 링크가 WebView에로드됩니다. (모든 SDK가 업데이트 된 상태에서 Android Studio 1.2.2 사용)
WebViewClient
전부라면 서브 클래 싱이 필요하지 않습니다. 이 작업을 수행하면됩니다myWebView.setWebViewClient(new WebViewClient());