我在Activity
创建了一个LinearLayout
,其中包含标题和网络视图。在onResume()
方法中,它调用webView.loadUrl(url)
。问题是,活动首先显示标题,屏幕的其余部分为空白,然后启动设备浏览器以及URL的页面。我想看到的是页面显示在标题下方的WebView
中。可能是什么问题?
修改: 好的,做了一些进一步的搜索并找到了这个:
Clicking URLs opens default browser
它指向WebView
教程here。
只需实施Web客户端并进行设置即可。
答案 0 :(得分:730)
根据Maudicus和Hit的建议回答我的问题。
检查WebView教程here。 只需实施Web客户端并在loadUrl 之前将其设置为。最简单的方法是:
myWebView.setWebViewClient(new WebViewClient());
有关网络内容的更高级处理,请考虑使用ChromeClient。
答案 1 :(得分:92)
使用此:
lWebView.setWebViewClient(new WebViewClient());
答案 2 :(得分:48)
像这样使用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dedline);
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl("https://google.com");
}
答案 3 :(得分:22)
让你的活动像这样。
public class MainActivity extends Activity {
WebView browser;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// find the WebView by name in the main.xml of step 2
browser=(WebView)findViewById(R.id.wvwMain);
// Enable javascript
browser.getSettings().setJavaScriptEnabled(true);
// Set WebView client
browser.setWebChromeClient(new WebChromeClient());
browser.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
// Load the webpage
browser.loadUrl("http://google.com/");
}
}
答案 4 :(得分:18)
我遇到了同样的问题,我找到了解决方案 Android's official Documentation about WebView
这是我的onCreateView()
方法,在这里我用两种方法来打开网址
方法1 在浏览器中打开网址
方法2 在您想要的WebView中打开网址。
我在我的应用程序中使用方法2,这是我的代码:
public class MainActivity extends Activity {
private WebView myWebView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false);
// Show the dummy content as text in a TextView.
if (mItem != null) {
/* Method : 1
This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */
//((WebView) rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url);
// Method : 2
myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file
myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient
myWebView.loadUrl(mItem.url); // Load your desired url
}
return rootView;
} }
答案 5 :(得分:6)
简单回答你可以像这样使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
setContentView(webView);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.google.com");
}
}
答案 6 :(得分:5)
试试这段代码......
private void startWebView(String url) {
//Create new webview Client to show progress dialog
//When opening a url or click on link
webView.setWebViewClient(new WebViewClient() {
ProgressDialog progressDialog;
//If you will not use this method url links are opeen in new brower not in webview
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
//Show loader on url load
public void onLoadResource (final WebView view, String url) {
if (progressDialog == null) {
// in standard case YourActivity.this
progressDialog = new ProgressDialog(view.getContext());
progressDialog.setMessage("Loading...");
progressDialog.show();
}
}
public void onPageFinished(WebView view, String url) {
try{
if (progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog = null;
}
}catch(Exception exception){
exception.printStackTrace();
}
}
});
// Javascript inabled on webview
webView.getSettings().setJavaScriptEnabled(true);
// Other webview options
/*
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.getSettings().setBuiltInZoomControls(true);
*/
/*
String summary = "<html><body>You scored <b>192</b> points.</body></html>";
webview.loadData(summary, "text/html", null);
*/
//Load url in webview
webView.loadUrl(url);
}
答案 7 :(得分:3)
如果看到an empty page,请启用JavaScript。
webView.setWebViewClient(new WebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.loadUrl(url);
答案 8 :(得分:0)
使用
mWebView.setWebViewClient(new WebViewClient());
mWebView是WebView的对象
答案 9 :(得分:0)
如果您使用的是 webChromeClient ,建议您同时使用 webChromeClient 和 webViewClient 。因为 webChromeClient 不提供 shouldOverrideUrlLoading 。两者都可以。
webview.webViewClient = WebViewClient()
webview.webChromeClient = Callback()
private inner class Callback : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
if (newProgress == 0) {
progressBar.visibility = View.VISIBLE
} else if (newProgress == 100) {
progressBar.visibility = View.GONE
}
}
}
答案 10 :(得分:0)
我刚刚发现这取决于 URL 的格式:
我的代码只是使用
webview.loadUrl(url)
无需设置
webView.setWebViewClient(new WebViewClient())
至少在我的情况下。 也许这对你们中的一些人有用。