WebView控件是干什么的,什么情况下会用到WebView控件呢?
有时候我们可能会碰到一些比较特殊的要求,比如说在应用程序里展示一些网页,但是我们知道加载和显示网页通常都是浏览器的任务,但是需求有明确指出,不允许打开系统浏览器,而我们也不可能自己去编写一个浏览器,这是就会用到WebView控件了。
借助WebView控件我们就可以在自己的应用程序里嵌入一个浏览器,从而非常轻松的展示各种各样的网页。
判断当前模拟器或手机的网络连接状况
主函数
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mTextView;
private Button mButtonDetail;
private ConnectivityManager mconnectivityManager;
private NetworkInfo networkInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textview_net_detail);
mButtonDetail = (Button) findViewById(R.id.button_net_detail);
mButtonDetail.setOnClickListener(this);
mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = mconnectivityManager.getActiveNetworkInfo();
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_net_detail:
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(MainActivity.this, "network is available", Toast.LENGTH_SHORT).show();
mTextView.setText("连接网络的方式为:" + networkInfo.getTypeName());
} else {
Toast.makeText(MainActivity.this, "network is unavailable", Toast.LENGTH_SHORT).show();
mTextView.setText("没有网络连接");
}
break;
}
}
布局
<TextView
android:id="@+id/textview_net_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_net_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取网络详情"/>
MainActivity
public class MainActivity extends AppCompatActivity {
private WebView mwebView;
private TextView mTextViewErro;
private ProgressBar mprogressbar;
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextViewErro = (TextView) findViewById(R.id.textview_erro);
mprogressbar = (ProgressBar) findViewById(R.id.progressbar);
mconnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
networkInfo = mconnectivityManager.getActiveNetworkInfo();
mwebView = (WebView) findViewById(R.id.webview);
mwebView.getSettings().setJavaScriptEnabled(true);//调用setJavaScriptEnabled(true)来让WebView支持JavaScript脚本
WebSettings settings = mwebView.getSettings();
settings.setBuiltInZoomControls(true); // 显示放大缩小 controler
settings.setSupportZoom(true); // 可以缩放
settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);// 默认缩放模式
mwebView.getSettings().setDisplayZoomControls(false);//将缩放控件隐藏
mwebView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
mprogressbar.setProgress(newProgress);
}
});
mwebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
mprogressbar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mprogressbar.setVisibility(View.INVISIBLE);
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
mwebView.setVisibility(View.GONE);
Toast.makeText(getApplicationContext(), "同步失败,请稍后在试", Toast.LENGTH_SHORT).show();
mTextView.setText("加载失败");
mTextViewErro.setVisibility(View.VISIBLE);
}
});
mwebView.loadUrl("http://www.baidu.com");
}
@Override
//判断按下back键的时候是直接返回到主界面还是一级一级返回
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (mwebView.canGoBack()) {
mwebView.goBack();
return true;//一定要返回true,否则这个onKeyDown不起作用,仍然是直接返回到这界面。
} else {
finish();
return true;
}
}
return super.onKeyDown(keyCode, event);
}
}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:orientation="vertical" tools:context=".MainActivity">
<TextView
android:id="@+id/textview_net_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/button_net_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取网络详情"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"/>
<TextView
android:id="@+id/textview_erro"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="好遗憾@-@!加载失败哦"
android:visibility="invisible"
android:gravity="center"/>
</FrameLayout>
</LinearLayout>
总结: 显示放大缩小,以及隐藏缩放控件。
mwebView.getSettings().setJavaScriptEnabled(true);//调用setJavaScriptEnabled(true)来让WebView支持JavaScript脚本
WebSettings settings = mwebView.getSettings();
settings.setBuiltInZoomControls(true); // 显示放大缩小 controler
settings.setSupportZoom(true); // 可以缩放
settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);// 默认缩放模式
mwebView.getSettings().setDisplayZoomControls(false);//将缩放控件隐藏