android开发webview组件
webview组件可以显示网页的视图,是可以在其中滚动自己的Web浏览器或仅在活动中显示某些在线内容的基础。它使用WebKit渲染引擎来显示网页,并包括在历史记录中前后导航,放大和缩小,执行文本搜索等方法。
请注意,为了让Activity访问Internet并在WebView中加载网页,必须将INTERNET权限添加到Android Manifest文件中:
<uses-permission android:name = “android.permission.INTERNET” />
<manifest ... >
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
如果要将Web应用程序(或仅仅是网页)作为客户端应用程序的一部分提供,则可以使用它来完成WebView。该WebView类别是Android的一个扩展View类,可以让你显示网页为你的活动布局的一部分。它不包括充分开发的网页浏览器的任何功能,如导航控件或地址栏。WebView 默认情况下,所有这一切都会显示一个网页。
使用WebView有用的常见方案是,希望在应用程序中提供可能需要更新的信息,例如最终用户协议或用户指南。在Android应用程序中,可以创建Activity 包含a的应用程序,WebView然后使用它来显示在线托管的文档。
另一种WebView可以提供帮助的方案是,如果应用程序向用户提供始终需要Internet连接来检索数据的数据,例如电子邮件。在这种情况下,可能会发现WebView在Android应用程序中构建一个包含所有用户数据的网页,而不是执行网络请求,然后解析数据并在Android布局中呈现数据更容易。相反,您可以设计一个为Android设备量身定制的网页,然后WebView在加载网页的Android应用程序中实现一个网页。
要向应用程序中添加webview ,只需<WebView>在活动布局中包含该元素即可。layout布局代码可以写成:
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="1"
/>
要在WebView中加载网页,请使用loadUrl()
WebView myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");
java代码为:
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView= (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://www.baidu.com");
//这一段可以保证在webview中的网页中点击某个链接时仍然在app中打开,而不是用浏览器打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
view.loadUrl(url);
return true;}
});
}
@Override
//这一段代码可以保证在webview中点击返回键时不会退出程序,而是返回上一级页面
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode ==KeyEvent.KEYCODE_BACK && webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode,event);
}
webview下的几个类:
WebChromeClient:辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等。
onJsAlert(WebView view,String url,String message,JsResult result) 处理Js中的Alert对话框
onJsConfirm(WebView view,String url,String message,JsResult result) 处理Js中的Confirm对话框
onJsPrompt(WebView view,String url,String message,String defaultValue,JsPromptResult result) 处理Js中的Prompt对话框
onProgressChanged(WebView view,int newProgress) 当加载进度条发生改变时调用
onReceivedIcon(WebView view, Bitmap icon) 获得网页的icon
onReceivedTitle(WebView view, String title) 获得网页的标题
WebViewClient:辅助WebView处理各种通知与请求事件。
onPageStared(WebView view,String url) 通知主程序网页开始加载
onPageFinished(WebView view,String url,Bitmap favicon) 通知主程序,网页加载完毕
doUpdateVisitedHistory(WebView view,String url,boolean isReload) 更新历史记录
onLoadResource(WebView view,String url) 通知主程序WebView即将加载指定url的资源
onScaleChanged(WebView view,float oldScale,float newScale) ViewView的缩放发生改变时调用
shouldOverrideKeyEvent(WebView view,KeyEvent event) 控制webView是否处理按键时间,如果返回true,则WebView不处理,返回false则处理
shouldOverrideUrlLoading(WebView view,String url) 控制对新加载的Url的处理,返回true,说明主程序处理WebView不做处理,返回false意味着WebView会对其进行处理
onReceivedError(WebView view,int errorCode,String description,String failingUrl) 遇到不可恢复的错误信息时调用
WebSettings:WebView相关配置的设置,比如setJavaScriptEnabled()设置是否允许JS脚本执行
getSettings() 返回一个WebSettings对象,用来控制WebView的属性设置
loadUrl(String url) 加载指定的Url
loadData(String data,String mimeType,String encoding) 加载指定的Data到WebView中.使用"data:"作为标记头,该方法不能加载网络数据.其中mimeType为数据类型如:textml,image/jpeg. encoding为字符的编码方式
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) 比上面的loadData更加强大
setWebViewClient(WebViewClient client) 为WebView指定一个WebViewClient对象.WebViewClient可以辅助WebView处理各种通知,请求等事件。
setWebChromeClient(WebChromeClient client) 为WebView指定一个WebChromeClient对象,WebChromeClient专门用来辅助WebView处理js的对话框,网站title,网站图标,加载进度条等
loadUrl():直接显示网页内容(单独显示网络图片),一般不会出现乱码。
loadData(data, "text/html", "UTF-8"):用来加载URI格式的数据,不能通过网络来加载内容, 不能加载图片,而且经常会遇到乱码的问题,String类型的数据主要是Unicode编码的, 而WebView一般为了节省资源使用的是UTF-8编码,尽管我们按上面写了,但是还需要为webView设置: webview.getSettings().setDefaultTextEncodingName("UTF -8");
loadDataWithBaseURL(baseUrl, string, "text/html", "utf-8", null):loadData类的一个 增强类,可以加载图片,baseUrl为你存储的图片路径,而且只需在这里设置utf-8就可以解决乱码问题
下边写一写webview和js交互的东西。(一脸懵)
在WebView所在页面的Activity,使用下述代码:
webview.getSettings().setJavaScriptEnabled(true);//使webview启用js,默认为false。4.4以前的版本才有效。
webview.addJavascriptInterface(object,"name");//向webview添加一个js对象。4.2以后的版本无效
webSettings.setDefaultTextEncodingName("UTF-8");//转码,防止乱码
————————————————
版权声明:本文为CSDN博主「耳语吖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Fiverya/article/details/86495134