2

我试图在 PopupWindow 中包含一个 WebView。WebView 用于显示维基百科页面。

有趣的是,WebView 在使用模拟器时按我的意图工作。当我在我的测试设备(原装 ASUS Transformer)上使用该应用程序时,弹出窗口中没有显示网页,而是弹出窗口,我的加载程序显示加载进度,但随后出现默认网络浏览器以显示网页. 同样,它在弹出窗口中显示页面的模拟器中按预期工作。我查看了许多网站,包括 SO 上的许多帖子,但我没有尝试过任何工作。我希望其他人在他们的应用程序开发之一中看到了这一点。

我为按钮、PopupWindow 和 WebView 的设置实现的代码是:

WikiButton   = (ImageButton)findViewById(R.id.WikiButton);
htmlProgress = (ProgressBar)elemWebView.findViewById(R.id.htmlProgressBar);

htmlShowing  = -1;

// Necessary for the Info Popup window
infoWebViewPopup = new PopupWindow(infoWebView = inflater.inflate(R.layout.property_info_layout, null, false), 1105, 685, true);
infoWebViewPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
infoWebViewPopup.setFocusable(false);

infoWebHTMLView = (WebView)infoWebView.findViewById(R.id.infoWebHTMLView);
WebSettings mySettingsInfo = elemWebHTMLView.getSettings();
mySettingsInfo.setJavaScriptEnabled(true);

按钮操作代码是:

WikiButton.setOnClickListener(new View.OnClickListener(){
    infoWebHTMLView.clearView();

    String urlToGet = "http://en.wikipedia.org/wiki/" + "SOME OTHER STRING HERE";

    // Load the URL into the web view
    infoWebHTMLView.loadUrl(urlToGet);

    // Calculate posX and posY for placement
    infoWebViewPopup.setOutsideTouchable(false);
    infoWebViewPopup.showAtLocation(findViewById(R.id.properties_view), Gravity.LEFT | Gravity.TOP, posX, posY);
}

我为 WebView 实现的其他代码:

infoWebHTMLView.setWebChromeClient(new WebChromeClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        view.loadUrl(url);

        return true;
    }

    public void onProgressChanged(WebView view, int progress) {
        elemWebHTMLView.invalidate();

        htmlProgress.setProgress(progress);

        if(progress >= 100){
            htmlProgress.setVisibility(View.INVISIBLE);
        }else{
            htmlProgress.setVisibility(View.VISIBLE);
        }
    }
});

PopupWindow、WebView 和 Button 都已在 XML 文件中定义。

任何帮助将不胜感激,非常感谢。

4

1 回答 1

1

您应该使用 WebViewClient,而不是 WebChromeClient。

infoWebHTMLView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
});

确保在覆盖方法时添加 @Override 注释。如果您认为您正在覆盖一个方法,但实际上它并不存在,您会得到一个错误。

于 2012-09-09T23:33:28.143 回答