Android Java WebView开发:点击指定前缀链接时显示按钮的实现问题
实现方案
步骤1:初始化控件
在Activity的onCreate方法中先获取WebView和目标按钮的实例,初始状态将按钮设置为隐藏:
WebView webView = findViewById(R.id.webview); // 替换为你布局里WebView对应的id Button targetButton = findViewById(R.id.button); // 初始隐藏按钮 targetButton.setVisibility(View.GONE);
步骤2:配置WebView并拦截点击链接
给WebView设置WebViewClient,重写URL加载拦截方法,判断链接前缀匹配时显示按钮:
// 按需开启JS支持,如果你的本地页面用到JS必须开启 webView.getSettings().setJavaScriptEnabled(true); // 所有链接都在当前WebView内加载,不跳转系统浏览器 webView.setWebViewClient(new WebViewClient() { // 适配Android 7.0及以上版本 @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String clickUrl = request.getUrl().toString(); // 判断链接是否以stackoverflow开头 if (clickUrl.startsWith("https://stackoverflow.com")) { // 匹配成功,显示按钮 targetButton.setVisibility(View.VISIBLE); // 返回false代表继续加载该链接,返回true代表拦截该链接不加载 return false; } return super.shouldOverrideUrlLoading(view, request); } // 兼容Android 7.0以下版本 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("https://stackoverflow.com")) { targetButton.setVisibility(View.VISIBLE); return false; } return super.shouldOverrideUrlLoading(view, url); } }); // 加载本地assets目录下的页面 webView.loadUrl("file:///android_asset/index.html");
补充说明
- 如果需要匹配其他前缀的链接,直接修改
startsWith()方法内的判断字符串即可 - 如果点击匹配链接不需要跳转页面,仅显示按钮,把判断逻辑里的
return false改为return true即可 - 需要加载外部网页的话,记得在
AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
- 如果需要点击其他链接时自动隐藏按钮,在判断的else分支中添加
targetButton.setVisibility(View.GONE);即可
内容的提问来源于stack exchange,提问作者Jane R. Sandoval
相关产品推荐
相关产品推荐

