欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android怎样实现顶部标题栏+webView 效果

程序员文章站 2022-05-31 09:48:21
...

一、webView网络访问

1.在AndroidManifest.xml中添加

 //网络权限,当禁用后,无法进行检索等相关业务
 <uses-permission android:name="android.permission.INTERNET" />

2.在界面xml文件中添加

   <!--显示网页区域-->
    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="10dp" />

界面中显示图像

android怎样实现顶部标题栏+webView 效果

3.在Activity布局中添加,以访问网络为例

android怎样实现顶部标题栏+webView 效果

二、添加顶部标题栏

1.重要:

当 android:orientation=”vertical” 时, 只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal 是生效的。

当 android:orientation=”horizontal” 时, 只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical 是生效的。

android怎样实现顶部标题栏+webView 效果

2.添加控件

android怎样实现顶部标题栏+webView 效果

ok

android怎样实现顶部标题栏+webView 效果

三、拓展

1.使用WebView基本都会使用这两个类:WebViewClient与WebChromeClient

WebViewClient与WebChromeClient区别:

    WebViewClient主要帮助WebView处理各种通知、请求事件的,有以下常用方法: 
         - onPageFinished 页面请求完成 
         - onPageStarted 页面开始加载 
         - shouldOverrideUrlLoading 拦截url 
         - onReceivedError 访问错误时回调,例如访问网页时报错404,在这个方法回调的时候可以加载错误页面。

onPageStarted()onPageFinished():页面加载时和页面加载完毕时调用。

shouldOverrideKeyEvent():重写此方法才能处理浏览器中的按键事件。

shouldInterceptRequest():页面每一次请求资源之前都会调用这个方法(非UI线程调用)。

onLoadResource():页面加载资源时调用,每加载一个资源(比如图片)就调用一次。

onReceivedError():加载页面的服务器出现错误(比如404)时回调。

onReceivedSslError():重写此方法可以让webview处理https请求。

doUpdateVisitedHistory():更新历史记录。

onFormResubmission():应用程序重新请求网页数据。

onReceivedHttpAuthRequest():获取返回信息授权请求。

onScaleChanged():WebView发生缩放改变时调用。onUnhandledKeyEvent():Key事件未被加载时调用。
 

 

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等,有以下常用方法。 
        - onJsAlert webview不支持js的alert弹窗,需要自己监听然后通过dialog弹窗 
        - onReceivedTitle 获取网页标题 
        - onReceivedIcon 获取网页icon 
        - onProgressChanged 加载进度回调

2.WebView 常用方法

  • void loadUrl(String url):加载网络链接 url
  • boolean canGoBack():判断 WebView 当前是否可以返回上一页
  • goBack():回退到上一页
  • boolean canGoForward():判断 WebView 当前是否可以向前一页
  • goForward():回退到前一页
  • onPause():类似 Activity 生命周期,页面进入后台不可见状态
  • pauseTimers():该方法面向全局整个应用程序的webview,它会暂停所有webview的layout,parsing,JavaScript Timer。当程序进入后台时,该方法的调用可以降低CPU功耗。
  • onResume():在调用 onPause()后,可以调用该方法来恢复 WebView 的运行。
  • resumeTimers():恢复pauseTimers时的所有操作。(注:pauseTimers和resumeTimers 方法必须一起使用,否则再使用其它场景下的 WebView 会有问题)
  • destroy():销毁 WebView
  • clearHistory():清除当前 WebView 访问的历史记录。
  • clearCache(boolean includeDiskFiles):清空网页访问留下的缓存数据。需要注意的时,由于缓存是全局的,所以只要是WebView用到的缓存都会被清空,即便其他地方也会使用到。该方法接受一个参数,从命名即可看出作用。若设为false,则只清空内存里的资源缓存,而不清空磁盘里的。
  • reload():重新加载当前请求
  • setLayerType(int layerType, Paint paint):设置硬件加速、软件加速
  • removeAllViews():清除子view。
  • clearSslPreferences():清除ssl信息。
  • clearMatches():清除网页查找的高亮匹配字符。
  • removeJavascriptInterface(String interfaceName):删除interfaceName 对应的注入对象
  • addJavascriptInterface(Object object,String interfaceName):注入 java 对象。
  • setVerticalScrollBarEnabled(boolean verticalScrollBarEnabled):设置垂直方向滚动条。
  • setHorizontalScrollBarEnabled(boolean horizontalScrollBarEnabled):设置横向滚动条。
  • loadUrl(String url, Map<String, String> additionalHttpHeaders):加载制定url并携带http header数据。
  • evaluateJavascript(String script, ValueCallback<String> resultCallback):Api 19 之后可以采用此方法之行 Js。
  • stopLoading():停止 WebView 当前加载。
  • clearView():在Android 4.3及其以上系统这个api被丢弃了, 并且这个api大多数情况下会有bug,经常不能清除掉之前的渲染数据。官方建议通过loadUrl("about:blank")来实现这个功能,阴雨需要重新加载一个页面自然时间会收到影响。
  • freeMemory():释放内存,不过貌似不好用。
  • clearFormData():清除自动完成填充的表单数据。需要注意的是,该方法仅仅清除当前表单域自动完成填充的表单数据,并不会清除WebView存储到本地的数据。

3.webview如何打开其它的页面

https://blog.csdn.net/yushuangping/article/details/84076222

4.WebView清除本地cookies

/***
     * 如果用户已经登录,则同步本地的cookie到webview中
     */
    public void synCookies() {
        if (!CacheUtils.isLogin(this)) return;
        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        cookieManager.removeSessionCookie();//移除
        String cookies = PreferenceHelper.readString(this, AppConfig.COOKIE_KEY, AppConfig.COOKIE_KEY);
        KJLoger.debug(cookies);
        cookieManager.setCookie(url, cookies);
        CookieSyncManager.getInstance().sync();
    }