这个,这个WebView呀,是个好东西;可不是嘛!你想想好,你只需要敲几行代码,就能展示出与真实App开发出来的效果几乎一样!
那好,我们就来看看那神奇的WebView:‘
第一步:人人都说,WebView一定要添加啥子网络权限才能获取网络数据,其实不然,你可以转弯一下,如果我的这些数据是本地的呢?像:“ffile:///xxxx”,但这样的话需要把此文件存放在assets文件中,这就不需要添加权限了!哈哈!有点那个啥!不过大伙如今是信息时代,网络权限该添加的咱们还得添加,只是心里知道一件事情并没有绝对就OK!
- <!-- 网络权限 -->
- <uses-permission android:name="android.permission.INTERNET" />
第二步:在布局文件中,使用WebView控件:
- <WebView
- android:id="@+id/wv_index"
- android:layout_width="match_parent"
- android:layout_height="match_parent"/>
- public class Index_Activity extends BaseActivity {
- private WebView wv_index;
- private ProgressDialog mDialog;
- private final static int SHOW = 0;
- private final static int HIDE = 1;
- private Handler handler = new Handler(){
- public void handleMessage(android.os.Message msg) {
- super.handleMessage(msg);
- if(!Thread.currentThread().isInterrupted()) {
- switch(msg.what) {
- case SHOW:
- mDialog.show();
- break;
- case HIDE:
- mDialog.dismiss();
- break;
- }
- }
- };
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- initView();
- loadUrl(wv_index,"http://baidu.com/");
- }
- private void initView() {
- wv_index = (WebView) findViewById(R.id.wb_index);
- wv_index.getSettings().setJavaScriptEnabled(true);
- wv_index.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
- wv_index.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);
- wv_index.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
- wv_index.setWebViewClient(new WebViewClient(){
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- loadUrl(view,url);
- return true;
- }
- });
- wv_index.setWebChromeClient(new WebChromeClient(){
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- if(newProgress == 100) {
- handler.sendEmptyMessage(1);
- }
- super.onProgressChanged(view, newProgress);
- }
- });
- mDialog = new ProgressDialog(this);
- mDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
- mDialog.setMessage(getResources().getString(R.string.load_data));
- }
- private void loadUrl(final WebView view, final String url) {
- new Thread(){
- public void run(){
- handler.sendEmptyMessage(0);
- view.loadUrl(url);//载入网页
- }
- }.start();
- }<pre name="code" class="java"><span style="white-space:pre"> </span>@Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode == KeyEvent.KEYCODE_BACK && wv_index.canGoBack()){
- wv_index.goBack(); // goBack()表示返回WebView的上一页面
- }else if(keyCode == KeyEvent.KEYCODE_BACK){
- //调用双击退出方法
- exitBy2Click();
- }
- return false;
- }
- //双击退出方法
- private void exitBy2Click() {
- Timer tExit = null;
- if(isExit == false) {
- isExit = true;//准备退出
- Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_LONG).show();
- tExit = new Timer();
- tExit.schedule(new TimerTask(){
- @Override
- public void run() {
- isExit = false;//取消退出
- }
- }, 3000); //如果3秒内没有再次按下返回键,则启动定时器取消掉刚才执行的退出任务
- }else{
- finish();
- System.exit(0);
- }
- }
- }
第一点:请大伙在请求网络数据时,一定要使用线程,也就是为什么以上代码在调用loadUrl()方法时是放在线程中的。
第二点:为了用户的体验效果,如果我们不重写onKeyDown(),那么,当用户点击返回键时,就是应用程序finish之日。