禁用WebView链接可在模拟器上运行,但在设备上无效

时间:2017-03-06 16:07:06

标签: java android android-emulator android-webview

我希望禁用我加载到WebView对象的页面的链接。我的代码在我的模拟器上使用api 25完美运行,但在23 api的手机上却没有。

这是阻止我的WebView链接的代码:

public class NoLinksWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return true;
    }
}

我将我的WebViewClient设置为NoLinksWebViewClient类型的对象。它可以在模拟器上实现,但不能在我的真实手机上实现。

如何解决这个问题?

3 个答案:

答案 0 :(得分:10)

  

我的代码在我的模拟器上使用api 25完美运行,但在我的手机上没有23 api。

我认为关键的区别不是模拟器与设备,而是不同的API级别。 如果您查看WebViewClient上的文档,您会发现有两种相似但不同的方法:

// since API 24
boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
// before API 24, now deprecated
boolean shouldOverrideUrlLoading(WebView view, String url)

由于您只覆盖了较新的方法,因此在旧设备上默认逻辑可以正常工作。发生这种情况是因为很明显API 23设备无法知道在API 24中该方法将被替换为另一个方法,因此它仍然会调用旧的(现已弃用)方法。

我相信要解决这个问题你应该覆盖这两种方法。

答案 1 :(得分:4)

简短的回答是你需要覆盖下面给出的两种方法。在API 24中不推荐使用 shouldOverrideUrlLoading(WebView视图,String url)方法,而 shouldOverrideUrlLoading(WebView视图,在API 24中添加了WebResourceRequest request)方法。

 @SuppressWarnings("deprecation")
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return true;
    }

    @TargetApi(Build.VERSION_CODES.N)
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
       return true;
    }

希望这些可以帮助你。

答案 2 :(得分:-2)

javafx.scene.Node.setDisable(boolean arg0)可以选择吗?这样你就可以阻止使用元素

Documentation