商城項目實戰(zhàn) | 10.1 xUtils3 詳細介紹以及 ViewUtils 的使用方法

本文為菜鳥窩作者劉婷的連載?!鄙坛琼椖繉崙?zhàn)”系列來聊聊仿”京東淘寶的購物商城”如何實現(xiàn)。
140套Android優(yōu)秀開源項目源碼,領(lǐng)取地址:http://mp.weixin.qq.com/s/afPGHqfdiApALZqHsXbw-A
或歡迎勾搭運營小姐姐(微信 id:BT474849)免費領(lǐng)取哦~

剛開始的時候,在 GitHub 上面出現(xiàn)了一款強大的開源框架叫 xUtils,里面包含了很多實用的android工具,并且支持大文件上傳,更全面的 http 請求協(xié)議支持(10種謂詞),擁有更加靈活的 ORM,更多的事件注解支持且不受混淆影響,該框架最低兼容版本為 android 2.2 (api level 8)。但是隨著 Android 版本的不斷更新,特別是 Android 6.0 之后,xUtils 的兼容不是很好,因此就出現(xiàn)了升級版的 xUtils,也就是 xUtils3。

xUtils3 詳細介紹

xUtils3 是 xUtils 的升級版本,包含了orm, http(s), image, view注解, 但依然很輕量級(246K), 最主要是特性強大, 方便擴展,當然對比之前的 xUtils,在 xUtils3 中很多的 API 接口都已經(jīng)改變了,使用方法也和之前不同了,所以本文主要是講解最新的 xUtils3 的詳細介紹以及該框架下的 ViewUtils 模塊的最新用法。

1. xUtils3 的特性

1.1 xUtils3 的主要特性

xUtils3 的主要特性如下。

  1. 1.穩(wěn)定的基石: AbsTask 和統(tǒng)一的回調(diào)接口 Callback, 任何異常, 即使你的回調(diào)方法實現(xiàn)有異常都會進入 onError,任何情況下 onFinished 總會讓你知道任務(wù)結(jié)束了。
  2. 2.基于高效穩(wěn)定的 orm 工具,http 模塊得以更方便的實現(xiàn) cookie (支持 domain、 path、 expiry 等特性)和 緩存(支持 Cache-Control、Last-Modified、 ETag 等特性)的支持。
  3. 3.有了強大的 http 及其下載緩存的支持,image 模塊的實現(xiàn)相當?shù)暮啙崳⑶抑С只厥毡?view 持有,但被 Mem Cache 移除的圖片,減少頁面回退時的閃爍。
  4. 4.View 注解模塊僅僅400多行代碼卻靈活的支持了各種 View 注入和事件綁定, 包括擁有多了方法的 listener 的支持。

1.2 其他特性

xUtils3 的一些其他特性。

  1. 1.支持超大文件(超過 2G )上傳。
  2. 2.更全面的 http 請求協(xié)議支持(11種謂詞),在 xUtils 中只支持10種謂詞。
  3. 3.擁有更加靈活的 ORM, 和 greenDao 一致的性能。
  4. 4.更多的事件注解支持且不受混淆影響。
  5. 5.圖片綁定支持 gif (受系統(tǒng)兼容性影響, 部分 gif 文件只能靜態(tài)顯示)、webp,支持圓角,圓形, 方形等裁剪,支持自動旋轉(zhuǎn)。
  6. 6.從 3.5.0 開始不再包含 libwebpbackport.so,需要在 Android4.2 以下設(shè)備兼容 webp 的請使用 3.4.0 版本。

2. xUtils3 主要四大模塊

xUtils 中目前包括了主要的四大模塊,分別為 DbUtils 模塊、ViewUtils 模塊、HttpUtils 模塊以及 BitmapUtils 模塊,下面對這四大模塊進行介紹。

2.1 DbUtils 模塊

  1. 1.Android 中的 orm 框架,一行代碼就可以進行增刪改查。
  2. 2.支持事務(wù),默認關(guān)閉。
  3. 3.可通過注解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK 約束等(需要混淆的時候請注解表名和列名)。
  4. 4.支持綁定外鍵,保存實體時外鍵關(guān)聯(lián)實體自動保存或更新。
  5. 5.自動加載外鍵關(guān)聯(lián)實體,支持延時加載。
  6. 6.支持鏈式表達查詢,更直觀的查詢語義。

2.2 ViewUtils 模塊

  1. 1.android 中的 ioc 框架,完全注解方式就可以進行 UI,資源和事件綁定。
  2. 2.新的事件綁定方式,使用混淆工具混淆后仍可正常工作。
  3. 3.目前支持常用的20種事件綁定,比如 setClickListener 等。

2.3 HttpUtils 模塊

  1. 1.支持同步,異步方式的請求。
  2. 2.支持大文件上傳,上傳大文件不會出現(xiàn) oom 內(nèi)存溢出情況。
  3. 3.支持 GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT 的請求。
  4. 4.下載支持301/302重定向,支持設(shè)置是否根據(jù) Content-Disposition 重命名下載的文件。
  5. 5.返回文本內(nèi)容的請求(默認只啟用了 GET 請求)支持緩存,可設(shè)置默認過期時間和針對當前請求的過期時間。

2.4 BitmapUtils 模塊

  1. 1.加載 Bitmap 的時候無需考慮 Bitmap 加載過程中出現(xiàn)的 oom 和 android 容器快速滑動時候出現(xiàn)的圖片錯位等現(xiàn)象。
  2. 2.支持加載網(wǎng)絡(luò)圖片和本地圖片。
  3. 3.內(nèi)存管理使用 lru 算法,更好的管理 Bitmap 內(nèi)存。
  4. 4.可配置線程加載線程數(shù)量,緩存大小,緩存路徑,加載顯示動畫等。

xUtils3 中 ViewUtils 的主要作用

ViewUtils 的主要作用有兩點,一是可以完全注解方式就可以進行 UI 綁定和事件綁定,另外一個就是無需 findViewById 和 setOnClickListener 等。而其中的 UI 綁定和事件綁定下面詳細介紹。

1. UI 綁定

UI 綁定簡而言之就是針對于控件和 View 了,分為多種綁定方法。


@ContentView(R.layout.view_acti); //setContentView 注解在activity的聲明上方
@ViewInject(R.id.lv_test); //反射view  注解在一個view聲明上

2. 事件綁定

事件綁定就是指監(jiān)聽事件的注解,比如 setOnClickListener 等。

@Event(R.id.button) //將一個自定義的方法綁定到一個 view 的事件上

至于具體的使用方法就在下面了。

xUtils3 中 ViewUtils 的使用方法

xUtils3 框架中包含了很多的工具,主要的四大模塊功能也很強大,這次主要是要講解其中的 ViewUtils 模塊的使用。

1. Gradle 添加依賴

在 module 下的 build.gradle 文件下面添加對 xUtils3 的依賴。

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.2.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.1'
    testCompile 'junit:junit:4.12'
    compile 'org.xutils:xutils:3.5.0'
}

2. ViewUtils 初始化

在 Activity 和 Fragment 中初始化 ViewUtils 模塊略有不同,所以就分開介紹了。

2.1 Activity 中初始化

在 Activity 中初始化比較簡單,直接在 onCreate 中一行代碼就搞定了。

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        x.view().inject(this);
    }

2.2 Fragment 中初始化

Fragment 的生命周期依賴于 Activity,另外在 Fragment 中一些方法也與 Activity 不同,所以 ViewUtils 的初始化方法也不太一樣了。

private boolean injected = false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        injected = true;
        return x.view().inject(this, inflater, container);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        if (!injected) {
            x.view().inject(this, this.getView());
        }
    }

其中 injected 是用來標識是否已經(jīng)注入了 View ,如果還沒有注入,在 onViewCreated 中要寫入注入 View 的方法。

3. ViewUtils 綁定控件

一般在 Activity 或者 Fragment 中聲明控件,都要使用方法 findViewById,如果控件一旦多了,就會很麻煩,代碼要寫不少,但是使用 ViewUtils 可以通過注解的方式直接進行 UI 綁定,方法也很簡單。

@ViewInject(R.id.textView)
private TextView textView;

4. ViewUtils 綁定布局

在為 Activity 或者 Fragment 添加布局時,我們都會使用到 setContentView(int layoutRes) 方法,在 ViewUtils 添加了直接注解布局的方法,如下。

@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
   .....
}

在 Fragment 中注解方法是一樣的,在 Fragment 中直接添加就好。

5. ViewUtils 綁定事件

在之前的按鈕的點擊事件、列表選項的 item 點擊事件等,寫起來代碼都比較多些,而使用 ViewUtils 都可以變得簡單起來,先來看下按鈕的點擊事件的綁定。

// 取消了之前使用方法名綁定事件的方式,使用id綁定不受混淆影響
// 支持綁定多個id @Event({R.id.id1, R.id.id2, R.id.id3})
// or @Event(value={R.id.id1, R.id.id2, R.id.id3}, parentId={R.id.pid1, R.id.pid2, R.id.pid3})
// 更多事件支持參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
@Event(R.id.test_button)
public void testButtonClick(View v) { // 方法簽名必須和接口中的要求一致
    ...
}

上面是按鈕的點擊事件的綁定,很方便,再來看看列表選項的 item 點擊事件的綁定。

//選項的點擊事件 OnItemClickListener
@Event(value = R.id.lv_img, type = AdapterView.OnItemClickListener.class)
    private void onImageItemClick(AdapterView<?> parent, View view, int position, long id) {
        ....
    }

ViewUtils 所支持的事件的綁定還有很多種,這里就主要介紹上面兩種,更多的使用方法請參考 xUtils3 源碼。

結(jié)束語

xUtils3 在 xUtils 的基礎(chǔ)上優(yōu)化了不少,ViewUtils 注解也更為的簡單明了,有了 ViewUtils,我們就不用像之前一樣不斷的對控件進行聲明,另外對于事件的處理也簡化了不少,在后期的商城項目實戰(zhàn)中,都將使用 ViewUtils 來做 UI 的綁定以及事件的綁定。

【五一大促】菜鳥窩全場android項目實戰(zhàn)課程低至五折,更有價值33元的四款熱門技術(shù)免費領(lǐng),17年初優(yōu)惠力度最大的一次活動,有意向的童鞋不要錯過
狂戳>>http://www.cniao5.com/hd/2017/51.html

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 太長了,還是轉(zhuǎn)載吧...今天在看博客的時候,無意中發(fā)現(xiàn)了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,383評論 3 283
  • 第二章:故事的功能 一個精彩的故事可以讓人快速掌握事情的關(guān)鍵點。我們通過故事整理、展示自己,也透過故事讓別人快速認...
    謝行知閱讀 751評論 0 2
  • 引言# 又一周過去了,時間似穿梭般過得飛快。像一葉駛離渡口的舟,一蒿撐過,我離我的30歲越來越遠了。與30歲之前內(nèi)...
    Eutopia405閱讀 310評論 0 0
  • 14天的小白訓練營就算畢業(yè)了,但是我的投資理財路才剛剛開始,在接觸長投之前,我只知道投資的水很深,卻沒想過路...
    Oo婷閱讀 225評論 1 0

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