我试图在PopupWindow中包含一个WebView。 WebView将显示维基百科页面。
有趣的是,WebView在使用模拟器时可以正常工作。当我在我的测试设备(原始华硕Transformer)上使用应用程序时,弹出窗口出现,而我的加载程序显示加载进度,然后默认的Web浏览器出现以显示网页。同样,它在模拟器中按预期工作,页面在弹出窗口中显示。我看过很多网站,包括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文件中定义。
感谢任何帮助,非常感谢。
答案 0 :(得分:1)
您应该使用WebViewClient,而不是WebChromeClient。
infoWebHTMLView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
确保在覆盖方法时添加@Override注释。如果您认为自己覆盖了一个方法但实际上它不存在,那么您将收到错误。