J'ai une vue Web dans Android et j'y ouvre une page Web html. Mais c'est plein de liens et d'images, et quand je clique sur l'un d'entre eux, il se charge dans ma vue Web. Je souhaite désactiver ce comportement. Par conséquent, si je clique sur un lien, ne le chargez pas. J'ai essayé cette solution et édité un peu pour moi, mais cela n'a pas fonctionné . Mon code webviewclient:
private boolean loaded = false;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(loaded == false){
view.loadUrl(url);
loaded = true;
return true;
}else{
return false;
}
}
Ma mise en œuvre et les paramètres WebView.
WebView wv = (WebView) findViewById(R.id.recipeWv);
ourWebViewClient webViewClient = new ourWebViewClient();
webViewClient.shouldOverrideUrlLoading(wv, URLsave);
wv.setWebViewClient(webViewClient);
wv.setFocusableInTouchMode(false);
wv.setFocusable(false);
wv.setClickable(false);
WebSettings settings = wv.getSettings();
settings.setDefaultTextEncodingName("utf-8");
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
Exemple: si l'utilisateur ouvre dans ma vue Web la page d'accueil StackOverflow et clique sur l'un des liens (comme "Questions"), la vue Web doit rester sur la page d'accueil StackOverflow.
Vous devriez enregistrer dans une variable de classe votre URL actuelle et vérifier si elle est identique à celle chargée. Lorsque l'utilisateur clique sur un lien, la shouldOverrideUrlLoading
est appelée et vérifie le site Web .
private String currentUrl;
public ourWebViewClient(String currentUrl) {
this.currentUrl = currentUrl;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.equals(currentUrl)) {
view.loadUrl(url);
}
return true;
}
Important: n'oubliez pas de définir la WebViewClient
sur votre WebView
.
ourWebViewClient webViewClient = new ourWebViewClient(urlToLoad);
wv.setWebViewClient(webViewClient);
Implémenter un WebViewClient et simplement renvoyer true à partir de cette méthode de WebView Client
webView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
});
Si vous voulez ouvrir le lien interne d'une page Web dans une fenêtre différente, alors
Ne pas utiliser
WebView webView;//Your WebView Object
webView.setWebViewClient(new HelpClient());// Comment this line
B'coz setWebViewClient () method prend en charge l'ouverture d'une nouvelle page dans la même vue Web. Si simple commenter cette ligne.
private class HelpClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().equals("www.example.com")) {
// This is my web site, so do not override; let my WebView load the page
return false;
}
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
}
J'espère que cela fonctionnera.
Vous devez ajouter une ligne de code supplémentaire, telle que so-
webview.loadUrl(url);
webview.setWebViewClient(new MyWebViewClient());
Et ajoutez une classe supplémentaire MyWebViewClient comme ceci-
/* Class for webview client */
class MyWebViewClient extends WebViewClient {
// show the web page in webview but not in web browser
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
}
Même moi avions été confrontés au même problème. J'ai résolu ce problème comme ci-dessous
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
Avec des expressions lambda
webView.setOnTouchListener((v, event) -> true);
Très similaire à la réponse d'Amit Gupta, mais j'ai trouvé un moyen plus court de le faire.
private String currentUrl;
public CustomWebViewClient(String currentUrl) {
this.currentUrl = currentUrl;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return ! url.equals(currentUrl);
}
Une fois ce CustomWebViewClient défini, définissez le client sur la vue Web.
CustomWebViewClient webViewClient = new CustomWebViewClient(urlToLoad);
wv.setWebViewClient(webViewClient);