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");//转码,防止乱码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值