android开发之WebView使用(非详解)

来源:互联网 发布:mysql where 优先级 编辑:程序博客网 时间:2024/05/16 12:22

这个,这个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"/>


在代码中获取WebView对象:
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;}}};};@Overrideprotected 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(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {loadUrl(view,url);return true;}});wv_index.setWebChromeClient(new WebChromeClient(){@Overridepublic 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>@Overridepublic 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(){@Overridepublic void run() {isExit = false;//取消退出}}, 3000); //如果3秒内没有再次按下返回键,则启动定时器取消掉刚才执行的退出任务}else{finish();System.exit(0);}}}
以上代码,我要特地的说明一下几个注意点:

第一点:请大伙在请求网络数据时,一定要使用线程,也就是为什么以上代码在调用loadUrl()方法时是放在线程中的。

第二点:为了用户的体验效果,如果我们不重写onKeyDown(),那么,当用户点击返回键时,就是应用程序finish之日。

0 0
原创粉丝点击