AgentWeb , 一個(gè)簡(jiǎn)潔易用的 Android Web 庫

AgentWeb 介紹

AgentWeb 是一個(gè)高度封裝的 Android WebView ,簡(jiǎn)單易用 , 帶有進(jìn)度條 、 支持文件上傳 、 下載 、 簡(jiǎn)化 Javascript 通信 ,加強(qiáng) Web 安全的庫 。 App 下載體驗(yàn)

前言

WebView 可謂是每個(gè)應(yīng)用必備的一個(gè)控件了 ,但是談起它的使用 ,讓很多人都不是那么喜歡它 ,比如說每個(gè) Web 頁面都需要各種一大推的 setting ,好一點(diǎn)的可能封裝成一個(gè) BaseWebActivity 和 BaseWebFragment ,但是重復(fù)的代碼總是讓有潔癖的程序員不舒服 ,而且 WebView 本身功能也不是很完善 , AgentWeb 就泥補(bǔ)了這些空缺 。

AgentWeb 功能

  1. 支持進(jìn)度條以及自定義進(jìn)度條
  2. 支持文件下載
  3. 支持文件斷點(diǎn)續(xù)傳
  4. 支持下載通知形式提示進(jìn)度
  5. 簡(jiǎn)化 Javascript 通信
  6. 支持返回事件處理
  7. 支持注入 Cookies
  8. WebView 安全

為什么要使用 AgentWeb ?

七個(gè)字 ,簡(jiǎn)潔易用體驗(yàn)好 。 最重要的是 WebView 很多東西不支持呀 , 坑太多!

Web 文件下載 文件上傳 Js通信 斷點(diǎn)續(xù)傳 使用簡(jiǎn)易度 進(jìn)度條 線程安全
WebView 不支持 不支持 支持 不支持 麻煩 沒有 不安全
AgentWeb 支持 支持 更簡(jiǎn)潔 支持 簡(jiǎn)潔 安全

簡(jiǎn)潔易用

為什么說它簡(jiǎn)潔易用嗎 ? 下面京東商城效果圖 , 只需一句話 !

mAgentWeb = AgentWeb.with(this)//傳入Activity
                .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
                .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
                .defaultProgressBarColor() // 使用默認(rèn)進(jìn)度條顏色
                .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 title 回調(diào)
                .createAgentWeb()//
                .ready()
                .go("http://www.jd.com");

你沒看錯(cuò) ,里面沒有一句 Setting , 甚至連 WebChromeClient 都不配置就有進(jìn)度條 。

Javascript 通信拼接太麻煩 ? 請(qǐng)看 。

//Javascript 方法
function callByAndroid(){
      console.log("callByAndroid")
  }


Android 端

mAgentWeb.getJsEntraceAccess().quickCallJs("callByAndroid");

結(jié)果

05-27 08:27:04.945 469-469/com.just.library.agentweb:web I/Info: consoleMessage:callByAndroid  lineNumber:27

京東商城效果圖

京東效果圖

到了這里 , 弱弱問一句 , 你還有什么理由不使用 AgentWeb ?

淺談進(jìn)度條

為什么要談一下進(jìn)度條這個(gè)東西呢 ? 因?yàn)闆]有進(jìn)度條的 WebView 頁面體驗(yàn)實(shí)在太差了 ,AgentWeb 默認(rèn)的進(jìn)度條是一般瀏覽器的進(jìn)度條 ,為什么采用這種進(jìn)度條呢 ? 因?yàn)轶w驗(yàn)好 ,微信和QQ ,支付寶 、 UC 以及 Safari 都采用這種進(jìn)度條是有他們道理的 , 我還見過應(yīng)用加載 Web 頁面的時(shí)候直接彈 Dialog 不可取消 ,這種惡心的做法 ,沒有非常必要讓用戶確定情況都別彈 Dialog ,特別在用戶網(wǎng)絡(luò)不好的情況下 ,加載速度變得突奇的慢 ,那么 Dialog 就一直存在 ,用戶耐性不好 ,只能把你進(jìn)程殺死 。

Agentweb 視圖結(jié)構(gòu)

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </WebView>
         <!--進(jìn)度條-->
        <com.just.library.BaseIndicatorView
            android:layout_width="match_parent"
            android:layout_height="2dp"
            >

        </com.just.library.BaseIndicatorView>
    </FrameLayout>

很清晰 AgentWeb 最外層是 FrameLayout , 所以在使用 AgentWeb 的時(shí)候還需要給 FrameLayout 指定父控件(下面有使用方式) 。

引入

  • Gradle

    compile 'com.just.agentweb:agentweb:1.0.3'
    
  • Maven

    <dependency>
      <groupId>com.just.agentweb</groupId>
      <artifactId>agentweb</artifactId>
      <version>1.0.3</version>
      <type>pom</type>
    </dependency>
    
    

用法

Activity 使用如下

mAgentWeb = AgentWeb.with(this)//傳入Activity
                .setAgentWebParent(mLinearLayout, new LinearLayout.LayoutParams(-1, -1))//傳入AgentWeb 的父控件 ,如果父控件為 RelativeLayout , 那么第二參數(shù)需要傳入 RelativeLayout.LayoutParams
                .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
                .defaultProgressBarColor() // 使用默認(rèn)進(jìn)度條顏色
                .setReceivedTitleCallback(mCallback) //設(shè)置 Web 頁面的 title 回調(diào)
                .createAgentWeb()//
                .ready()
                .go("http://www.jd.com");

Fragment 使用如下

@Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mAgentWeb = AgentWeb.with(this.getActivity(), this)//這里需要把 Activity 、 和 Fragment  同時(shí)傳入
                .setAgentWebParent((ViewGroup) view, new LinearLayout.LayoutParams(-1, -1))// 設(shè)置 AgentWeb 的父控件 , 這里的view 是 LinearLayout , 那么需要傳入 LinearLayout.LayoutParams
                .useDefaultIndicator()// 使用默認(rèn)進(jìn)度條
                .setReceivedTitleCallback(mCallback) //標(biāo)題回調(diào)
                .setSecurityType(AgentWeb.SecurityType.strict) //注意這里開啟 strict 模式 , 設(shè)備低于 4.2 情況下回把注入的 Js 全部清空掉 , 這里推薦使用 onJsPrompt 通信
                .createAgentWeb()//
                .ready()//
                .go(getUrl());
        
    }

混淆


-keep public class * extends android.webkit.WebChromeClient

總結(jié)

AgentWeb 是一個(gè)把 WebView 完全代理出來 , 脫離 Activity 、 Fragment xml 布局 , Android Web 庫 。

地址 : AgentWeb 歡迎star

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評(píng)論 25 709
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 47,133評(píng)論 22 665
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,029評(píng)論 4 61
  • 調(diào)度 fg、bg、jobs、&、 ctrl+z都是跟系統(tǒng)任務(wù)有關(guān)的 &這個(gè)用在一個(gè)命令的最后,可以把這個(gè)命令放到后...
    xlliu閱讀 247評(píng)論 0 0
  • 我剛從北京撤回滬寧線上的三線小城的時(shí)候,無數(shù)次想著重新回去。這里除了天氣比北京好,工作比北京輕松,我實(shí)在找不到還有...
    彭小六閱讀 4,502評(píng)論 66 90

友情鏈接更多精彩內(nèi)容