Короче говоря, я хочу, чтобы, когда я нажимаю на телеграмму в веб-просмотре, я не хотел, чтобы ссылка открывалась, или если я нажимаю на телеграмму, я хочу оставаться на той же странице без открытия ссылки
я пытался искать, но ничего не нашел, в лучшем случае я нашел что-то о том, как отключить все ссылки в веб-просмотре, а не некоторые
Вы должны использовать клиент веб-просмотра для перехвата кликов.
В вашем веб-просмотре установите webViewClient
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (isValidEmail(url)) {
return true;
} else if (url.contains("www.instagram.com"))
return true;
else if (url.contains("https://t.me"))
return true;
else
return super.shouldOverrideUrlLoading(view, request)
}
@Override
public void onLoadResource(WebView view, String url) {
// do nothing
//super.onLoadResource(view, url);
}
});
Чтобы проверить, является ли это действительным адресом электронной почты:
public static boolean isValidEmail(CharSequence target) { return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
}
Теперь в shouldOverrideUrlLoading
вы можете проверить URL-адрес и указать, следует ли переопределить загрузку URL-адреса или нет в соответствии с вашими потребностями.
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new MyChrome());
webView.loadUrl("https://streamingcommunity.love/");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
super.onBackPressed();
}
}
private class MyChrome extends WebChromeClient {
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
protected FrameLayout mFullscreenContainer;
private int mOriginalOrientation;
private int mOriginalSystemUiVisibility;
MyChrome() {}
public Bitmap getDefaultVideoPoster()
{
if (mCustomView == null) {
return null;
}
return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
}
public void onHideCustomView()
{
((FrameLayout)getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
setRequestedOrientation(this.mOriginalOrientation);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
}
public void onShowCustomView(View paramView, WebChromeClient.CustomViewCallback paramCustomViewCallback)
{
if (this.mCustomView != null)
{
onHideCustomView();
return;
}
this.mCustomView = paramView;
this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
this.mOriginalOrientation = getRequestedOrientation();
this.mCustomViewCallback = paramCustomViewCallback;
((FrameLayout)getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
getWindow().getDecorView().setSystemUiVisibility(3846 | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
webView.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webView.restoreState(savedInstanceState);
}
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (isValidEmail(url)) {
return true;
} else if (url.contains("www.instagram.com")) {
return true;
} else if (url.contains("https://t.me"))
return true;
} else {
return super.shouldOverrideUrlLoading(view, request);
}
}
@Override
public void onLoadResource(WebView view, String url) {
// do nothing
//super.onLoadResource(view, url);
}
public boolean isValidEmail(CharSequence target) {
return (!TextUtils.isEmpty(target) && Patterns.EMAIL_ADDRESS.matcher(target).matches());
}
});
Комментарии перемещены в чат ; пожалуйста, не продолжайте обсуждение здесь. Прежде чем публиковать комментарий под этим, пожалуйста, ознакомьтесь с целями комментариев . Комментарии, которые не требуют разъяснений или предложений по улучшению, обычно относятся к ответу , к Meta Stack Overflow или в чату переполнения стека. Комментарии, продолжающие обсуждение, могут быть удалены.
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.contains("mailto:"))
return true;
if (url.contains("www.instagram.com"))
return true;
if (url.contains("https://t.me"))
return true;
else
return super.shouldOverrideUrlLoading(view, request);
}
});
братан, я пытался внести изменения в код, и я могу сказать вам, что то же самое касается электронной почты, которая не открывается, все в порядке
тогда я хотел спросить вас еще о чем вы знаете как я могу вставить блокировщик рекламы внутри кода, я нашел кое-что в гугле, но я не нашел многого
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Комментарии перемещены в чат ; пожалуйста, не продолжайте обсуждение здесь. Прежде чем публиковать комментарий под этим, пожалуйста, ознакомьтесь с целями комментариев . Комментарии, которые не требуют разъяснений или предложений по улучшению, обычно относятся к ответу , к Meta Stack Overflow или в чату переполнения стека. Комментарии, продолжающие обсуждение, могут быть удалены.