您的位置:首页 > 移动开发

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

2015-01-15 23:34 721 查看
这个,这个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;
}
}
};
};

@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之日。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息