1. 程式人生 > 其它 >Android 進階 | 十四例 JetPack 知識點實戰系列,千萬不要錯過!

Android 進階 | 十四例 JetPack 知識點實戰系列,千萬不要錯過!

一,初識 ConstraintLayout 之實現登入頁面

ConstraintLayout

Constraint Layout 是最受歡迎的 Jetpack 庫之一。

ConstraintLayout 是一個使用 “相對定位” 靈活地確定微件的位置和大小的一個佈局。它的出現是為了解決開發中過於複雜的頁面層級巢狀過多的問題——層級過深會增加繪製介面需要的時間,影響使用者體驗,以靈活的方式定位和調整小部件。

專案實戰

1)建立專案

① ConstraintLayout 初識
② ConstraintLayout 實現登入頁面

  • UI元素準備
  • Logo佈局調整
  • 同意協議的TextView的佈局調整
  • 四個三方登入按鈕佈局調整
  • 手機登入按鈕佈局調整

2)沉浸式的佈局
3)富文字
4)屬性動畫

二、Navigation 實踐之實現 APP 主框架以及 Navigation 的相關介紹

Navigaion 是 Android JetPack 框架中的一員,是一套新的 Fragment 管理框架。

可以幫助開發者很好的處理 fragment 之間的跳轉,優雅的支援 fragment 之間的轉場動畫,支援通過 deeplink 直接定位到 fragment。通過第三方的外掛支援 fragment 之間安全的引數傳遞,可以視覺化的編輯各個元件之間的跳轉關係。

專案實戰

1)搭建 Bottom Navigation Activity

  • 新建 5個Fragment
  • 新建 Menu
  • 組裝 BottomNavigationView
  • 建立和設定 Navigation
  • 進行 Navigation 功能裝配
  • 知識點拾遺

2)導航介面跳轉
3)Navigation 傳值

  • 普通傳值方式
  • 使用 Safe Args 傳值

4)Navigation 跳轉動畫

  • 給 Action 設定 animation
  • 共享元素變換(Shared Element Transition)

5)導航檔案拆分
6)Deeplink 導航

三、使用 Coroutines, Retrofit,模式實現網路資料請求

Coroutines(協程), Retrofit

Retrofit 是當前應用非常廣泛的網路請求框架,而 Coroutines 則是 Kotlin 中用於執行非同步任務的框架,比 RxJava 還要方便易用。

專案實戰

1)kotlin - Coroutine 協程

  • 啟動協程
  • 協程中的非同步操作 --- suspend函式
  • 協程中的異常處理機制
  • 協程總結

2)用協程和Retrofit實現網路請求

四、使用 TabLayout,ViewPager2 ,RecyclerView實現實現歌單廣場頁面

TabLayout,ViewPager2 ,RecyclerView

TabLayout
Tablayout 繼承自 HorizontalScrollView,用作頁面切換指示器,因使用簡便功能強大而廣泛使用在 App 中。

ViewPager2
距離 ViewPager2 正式版的釋出已經一年多了,目前 ViewPager 早已停止更新,官方鼓勵使用 ViewPager2 替代。ViewPager2底層基於RecyclerView實現,因此可以獲得RecyclerView帶來的諸多收益:

  • 拋棄傳統的PagerAdapter,統一了Adapter的API。
  • 通過LinearLayoutManager可以實現類似抖音的縱向滑動。
  • 支援DiffUtil,可以實現區域性重新整理。
  • 支援RTL(right-to-left),對於一些有出海需求的APP非常有用。
  • 支援ItemDecorator。

RecyclerView
RecyclerView 是一個強大又靈活的 View,可以用有限的 View 來展示大量的資料。

專案實戰

1)ViewPager2

  • 新增ViewPager2
  • ViewPager2設定Adapter
  • 監聽ViewPager2的滾動

2)TabLayout
3)RecyclerView

  • 新增 RecyclerView
  • 給 RecyclerView 新增網格佈局管理器
  • 建立 RecyclerView.Adapter
  • 將 Adapter 賦值給 RecyclerView

4)網路資料請求和資料填充
5)優化介面

  • 將圖片設定成有5dp的圓角
  • 幾個介面的請求地址不同

五、歌單頁面 MVVM 架構改造及其 ViewModel 和 LiveData 的使用介紹

ViewModel,LiveData
  • ViewModel

ViewModel 一發布,便成為了 Jetpack 中的核心元件之一。

ViewModel 可以將資料層與 UI 分離,而這種架構不僅可以簡化 UI 的生命週期的控制,也能讓程式碼獲得更好的可測試性。

  • LiveData

LiveData 是一種可觀察的資料儲存器類。與常規的可觀察類不同,LiveData 具有生命週期感知能力,意指它遵循其他應用元件(如 Activity、Fragment 或 Service)的生命週期。

這種感知能力可確保 LiveData 僅更新處於活躍生命週期狀態的應用元件觀察者。

LiveData 本身是觀察者,觀察元件的 Lifecycle,也是被觀察者,資料變化時要通知資料的觀察者。

專案實戰

1)MVC和MVVM介紹

  • MVC
  • MVVM

2)修改歌單頁面

  • 遺留問題1 - DiffUtil.ItemCallback怎麼使用
  • 遺留問題2 - 為什麼先判斷LiveData的value存不存在?

六、Paging 實現載入更多和下拉重新整理,錯誤後重新請求

Paging

Paging 專注於有大量資料請求的列表處理,讓開發者無需關心資料的分頁邏輯,將資料的獲取邏輯完全與 ui 隔離,降低專案的耦合。

但 Paging 的唯一侷限性是,它需要與 RecyclerView 結合使用,同時也要使用專有的 PagedListAdapter。這是因為,它會將資料統一封裝成一個 PagedList 物件,而adapter 持有該物件,一切資料的更新與變動都是通過 PagedList 來觸發。

專案實戰

1)Paging的優勢
2)Paging實現分頁載入更多
3)Paging和SwipRefreshLayout組合實現下拉重新整理
4)給RecyclerView新增載入狀態的Footer

  • 先定義一個是否顯示Footer的變數並且新增覆寫兩個方法:
  • 修改兩個覆寫方法
  • 遺留問題

5)發生網路錯誤後重試
6)幀動畫

七、vlayout 巢狀橫向 RecyclerView 和 Banner 實現主頁的展示,自定義 Moshi 的 JsonAdapter

VLayout

VLayout 即 VirtualLayout 是阿里開源的一個針對 RecyclerView 的庫,通過自定義 LayoutManager 來提供一整套佈局方案和佈局間的元件複用的問題。

專案實戰

1)vlayout架構分析
2)vlayout佈局介紹
3)基礎工作準備
4)vlayout實現輪播圖
5)欄位內容型別不一致

八、Room 資料庫實現增刪改查和事務處理

Room

Room 是 Jetpack 元件庫一員,屬於 ORM 庫,主要是對 Sqlite 做了一層抽象,從而簡化開發者對資料庫操作。Room 支援編譯時的語法檢查,並且支援返回 LiveData。

專案實戰

1)新增Room依賴
2)Room詳細介紹

  • Entity (實體)
  • Dao (資料訪問物件)
  • Database (資料庫)
  • Repository (倉庫)

3)DataBase建立時插入資料
4)Room實現歌單標籤編輯介面的增刪改查

九、Room 資料庫 Migration

1)新建 Entity
2)新建 Dao
3)修改 Database
4)修改 HomeViewModel
5)Migration

十、ExoPlayer 進行視訊播放的實現

ExoPlayer

ExoPlayer 是谷歌開源的一個應用級的音視訊播放器。ExoPlayer 支援基於 HTTP 的動態自適應流 (DASH)、SmoothStreaming 和通用加密、以及可以很好的支援播放佇列、播放源的無縫切換等功能。它採用易於自定義和擴充套件的設計。

專案實戰

1)ExoPlayer 介紹
2)ExoPlayer 簡單的使用方法
3)ExoPlayer 簡單自定義
4)ExoPlayer 高階自定義
5)ExoPlayer 在 RecyclerView 中的複用

十一、MotionLayout 讓動畫如此簡單

MotionLayout

MotionLayout 是 ConstrainLayout 2.0 庫中被引入的一個新類,幫助安卓開發者關聯手勢和元件動畫。

MotionLayout 就像它的名字一樣,首先它是一個佈局,可以放置元件。其次它還是 ConstrainLayout 的子類,內建豐富的功能。建立 MotionLayout 的目的是用於降低佈局過渡動畫和複雜的手勢處理之間的難度。

專案實戰

1)MotionLayout 基礎

  • 讓動畫跑起來
  • MotionScene 介紹
  • OnClick 設定
  • 弧形運動 Arc Motion
  • 多個 ConstraintLayout 屬性同時動畫
  • 自定義屬性
  • MotionLayout 的一些開發屬性
  • 圖片變換

2)關鍵幀 Keyframes

  • 位置關鍵幀 Position Keyframes
  • 屬性關鍵幀 Attribute Keyframes
  • 關鍵觸發關鍵幀 KeyTrigger Keyframes

3)程式碼啟動動畫和監聽動畫
4)MotionLayout 案例分析

  • 案例1:點贊和取消點贊
  • 案例2:迴圈旋轉和文字切換

十二、Kotlin Flow基礎知識詳解

Kotlin Flow

Flow 庫是在 Kotlin Coroutines 1.3.2 釋出之後新增的庫,也叫做非同步流,類似 RxJava 的 Observable 、 Flowable 等等

專案實戰

1)Flow 引入的場景
2)Flow 的特性
3)Flow 的建構函式
4)Flow 中間運算函式
5)Flow 結束函式
6)Flow 的錯誤異常處理
7)Flow 的取消
8)StateFlow / MutableStateFlow

十三、Kotlin Flow專案實戰-網路、資料庫和UI的應用

1)MVVM 架構中留給 Flow 的位置
2)網路資料請求

  • Retrofit API
  • Repository
  • ViewModel
  • Fragment

3)UI相關 - 輸入框中輸入關鍵詞

  • EditText 的 Event 轉為 Flow
  • Flow 值觸發網路請求和 UI 重新整理

4)資料庫

  • DataBase Migration
  • Dao
  • ViewModel
  • Fragment

十四、View Binding 替代 ButterKnife 和 Kotlin synthetics

View Binding

Viewbinding 用於替代 findViewById。它會為每一個 XML layout 檔案生成一個binding 類。binding 類例項包含所有擁有 id 的 View 的引用。

專案實戰

1)解決 findViewById 的憂傷
2)View Binding 的使用

  • 啟動 View Binding
  • View Binding 在 Activity 中的使用
  • View Binding 在 Fragment 中的使用
  • View Binding 在 Adapter 中的使用

3)從 Kotlin synthetics 遷移到 View Binding

  • 更新 Gradle 檔案
  • 更新 Activity, Fragment,和Adapter檔案

Android資料免費獲取直通車