Android中WebView控件的使用
在Android浏览器开发过程中,我们是使用webview控件来开发的。
下面应用一个简单的例子,如下所示:
简单代码如下:
package com.net.connect.app; import java.util.Date; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; public class WebViewActivity1 extends Activity { WebView browser; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.webview); browser = (WebView) findViewById(R.id.c131_webkit); // browser.loadUrl("http://commonsware.com"); // browser.loadData("<html><body><h2>Hello , world!</h2></body></html>", // "text/html", "UTF-8"); // 自定义网页 browser.setWebViewClient(new WebViewClient() { /* * 这个事件,将在用户点击链接时触发。通过判断url,可确定如何操作,如果返回true,表示我们已经处理了这个request,如果返回false * ,表示没有处理,那么浏览器将会根据url获取网页 */ public boolean shouldOverrideUrlLoading(WebView view, String url) { loadTime(); return true; // 表示已经处理了这次URL的请求 } }); loadTime(); } private void loadTime() { String page = "<html><body><a href="/" mce_href="/""clock/">" + new Date().toString() + "</a></body></html>"; /* * 这里我们使用了loadDataWithBaseUrl的方式。浏览器可以通过"file:///android_asset/"来获得映用中asset * /的资源。但是如果我们没有设置baseUrl,或者为空,这无法获取,想获取这些资源,baseUrl不能设置为http(s)/ftp(s) * /about/javascript这些已有专属的定义。在例子中,我们baseUrl设置为"wei://base". * 对于上面的那个链接地址为wei://base/clock */ browser.loadDataWithBaseURL("wei://base/clock", page, "text/html", "UTF-8", null); }
界面如下:
第二个例子,代码如下所示:
package com.net.connect.app; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.webkit.WebChromeClient; import android.webkit.WebView; /** * 进度条同webview整合 * @author mingg * */ public class WebViewActivity extends Activity { WebView browser; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Activity activity = this; // 因为方法是以final的方式,所以设置final。 // 设置activity的进度条,下面一句必须在setContentView之前,否则会报错。 // 下面的语句也可以用activity.requestWindowFeature(Window.FEATURE_PROGRESS);来替代 getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.webview); browser = (WebView) findViewById(R.id.c131_webkit); browser.getSettings().setJavaScriptEnabled(true); // 设置支持javascript的例子 // 通过WebChromeClient可以处理JS对话框,titles, 进度,等 ,这个例子,我们处理 // ,我们将websit下载的进度同步到acitity的进度条上。 browser.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int newProgress) { // activity的进度是0 to 10000 (both inclusive),所以要*100 activity.setProgress(newProgress * 100); } }); browser.loadUrl("http://www.baidu.com"); } }
可以显示进度条。而且显示的就是这个Web,如下所示:
如果要用个简单点的web浏览器的话。我们可以创建下面这个类:
package com.yarin.android.Examples_08_06; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.graphics.Bitmap; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.webkit.JsPromptResult; import android.webkit.JsResult; import android.webkit.URLUtil; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class Activity01 extends Activity { private final String DEBUG_TAG = "Activity01"; private Button mButton; private EditText mEditText; private WebView mWebView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_PROGRESS); setContentView(R.layout.main); mButton = (Button) findViewById(R.id.Button01); mEditText = (EditText) findViewById(R.id.EditText01); mEditText.setText("http://www.baidu.com"); mWebView = (WebView) findViewById(R.id.WebView01); //设置支持JavaScript脚本 WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); //设置可以访问文件 webSettings.setAllowFileAccess(true); //设置支持缩放 webSettings.setBuiltInZoomControls(true); //设置WebViewClient mWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } }); //设置WebChromeClient mWebView.setWebChromeClient(new WebChromeClient(){ @Override //处理javascript中的alert public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { //构建一个Builder来显示网页中的对话框 Builder builder = new Builder(Activity01.this); builder.setTitle("提示对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //点击确定按钮之后,继续执行网页中的操作 result.confirm(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; }; @Override //处理javascript中的confirm public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { Builder builder = new Builder(Activity01.this); builder.setTitle("带选择的对话框"); builder.setMessage(message); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setCancelable(false); builder.create(); builder.show(); return true; }; @Override //处理javascript中的prompt //message为网页中对话框的提示内容 //defaultValue在没有输入时,默认显示的内容 public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { //自定义一个带输入的对话框由TextView和EditText构成 final LayoutInflater factory = LayoutInflater.from(Activity01.this); final View dialogview = factory.inflate(R.layout.prom_dialog, null); //设置TextView对应网页中的提示信息 ((TextView) dialogview.findViewById(R.id.TextView_PROM)).setText(message); //设置EditText对应网页中的输入框 ((EditText) dialogview.findViewById(R.id.EditText_PROM)).setText(defaultValue); Builder builder = new Builder(Activity01.this); builder.setTitle("带输入的对话框"); builder.setView(dialogview); builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { //点击确定之后,取得输入的值,传给网页处理 String value = ((EditText) dialogview.findViewById(R.id.EditText_PROM)).getText().toString(); result.confirm(value); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface dialog) { result.cancel(); } }); builder.show(); return true; }; @Override //设置网页加载的进度条 public void onProgressChanged(WebView view, int newProgress) { Activity01.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100); super.onProgressChanged(view, newProgress); } @Override //设置应用程序的标题title public void onReceivedTitle(WebView view, String title) { Activity01.this.setTitle(title); super.onReceivedTitle(view, title); } }); //连接按钮事件监听 mButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { try { //取得编辑框中我们输入的内容 String url = mEditText.getText().toString(); //判断输入的内容是不是网址 if ( URLUtil.isNetworkUrl(url) ) { //装载网址 mWebView.loadUrl(url); } else { mEditText.setText("输入网址错误,请重新输入"); } } catch (Exception e) { Log.e(DEBUG_TAG, e.toString()); } } }); } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { //返回前一个页面 mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } }
当然要访问web的话,不要忘了在AndroidManifest.xml文件中加入Web权限申请
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
运行后的效果如下所示:
更多相关文章
- Android Studio 新建编辑条 点击按钮显示控件中的内容
- android 关于listview scrollview 底部 控件无法显示的两个解决
- android TextView控件属性列表
- Android之PopupWindow弹出对话框 Android之PopupWindow弹出对话
- android 常用控件一览(从底层分析,为自定义控件做下小铺垫)
- Android中日期和时间控件的使用
- Android 常用控件讲解
- Android给控件添加默认点击效果
- android控件常用属性区别