本系列文章來學習 Kotlin 和 Anko 插件 通過 Kotlin 開發(fā)一個 Android 項目驼鹅。
Kotlin-Anko學習(1) Kotlin州藕、Anko 介紹
Kotlin-Anko學習(2) Kotlin 語法基礎-基本類型
Kotlin-Anko學習(3) Kotlin 語法基礎-關鍵字 package榨馁、Import憨栽、if、when翼虫、for屑柔、while、return珍剑、break掸宛、continue
Kotlin-Anko學習(4) Kotlin語法-類、繼承招拙、抽象類
Kotlin-Anko學習(5) Kotlin語法-屬性唧瘾、字段措译、接口
Kotlin介紹
Kotlin語言 是由JetBrains公司開發(fā),在2017年Google I/O 大會上饰序,確立為Android官方開發(fā)語言领虹。
Kotlin語言特性
- 目標平臺:
- Windows(目前只支持 x86_64)
- Linux(x86_64、 arm32菌羽、 MIPS掠械、 MIPS little endian)
- MacOS(x86_64)
- iOS(只支持 arm64)
- Android(arm32 與 arm64)
- WebAssembly(只支持 wasm32)
- 與Java 100%兼容 完全互操作性
- 語法簡單 實用 富于表現力和高效地生產力 支持Lambda表達式(語法會在后續(xù)學習)
- 類型推斷 自動根據上下文來推斷類型
- 空安全 編譯期語法層面檢查可空類型
- 支持協程進行并發(fā)編程
- 支持函數式編程 (值就是函數由缆,函數就是值注祖。所有函數都消費函數,所有函數都生產函數)
- 支持快速實現 DSL
......
Kotlin語言設計
Andrey Breslav, Kotlin創(chuàng)始人
我們認為Kotlin的定位是一種現代化工業(yè)語言:它專注于代碼重用和可讀性的彈性抽象均唉,以及面向早期錯誤偵測是晨,和明確捕獲維護與清理的意圖,這些問題的靜態(tài)類型安全性舔箭。Kotlin最重要的使用場景之一是對于一個龐大的Java代碼庫罩缴,其開發(fā)者需要一個更棒的語言:你能夠將Java和Kotlin自由混合,遷移可以是漸進式的层扶,不需要一下子對整個代碼庫進行改變箫章。
Kotlin設計了一個“歸一化”的類型系統(一切類型皆是引用類型),純天然地設置了一道空指針的屏障镜会,使得Kotlin比Java更加安全可靠檬寂。Kotlin還引入了類型推斷、一等支持函數式編程戳表、Lambda桶至、高階函數、類的擴展函數與屬性匾旭、DSL等諸多特性镣屹,使得我們可以編寫簡單、優(yōu)雅且高效的代碼价涝,更加專注地投入在業(yè)務邏輯的實現上女蜈。
Anko介紹
Anko是一個提供圍繞 Android API 的 Kotlin 友好的包裝器的庫 ,以及一個可以用 Kotlin 代碼替換布局 .xml 文件的 DSL色瘩。
Anko插件的組成
1.Anko組件:
- 意圖 Intents (wiki)
- 對話框和提示 Dialogs and toasts (wiki)
- 日志 Logging (wiki)
- 資源 Resources and dimensions (wiki)
- Anko布局 Anko Layouts (wiki):
//采用Anko在代碼中寫動態(tài)布局鞭光,無需寫layout XML
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
}
}
以上代碼實現的布局:- Anko數據庫交互 Anko SQLite (wiki)
// 通過family_name 查詢家庭成員列表
fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use {
db.select("Users")
.whereSimple("family_name = ?", "John")
.doExec()
.parseList(UserParser)
}
- Anko協同程序 Anko Coroutines (wiki)
//提供asReference,采用若引用泞遗,避免內存泄露
suspend fun getData(): Data { ... }
class MyActivity : Activity() {
fun loadAndShowData() {
// Ref<T>uses the WeakReference under the hood
val ref: Ref<MyActivity> = this.asReference()
async(UI) {
val data = getData()
// Use ref() instead of this@MyActivity
ref().showData()
}
}
fun showData(data: Data) { ... }
}
//通過bg() 輕松的開啟后臺線程執(zhí)行耗時操作 提供非常方便的UI/工作線程相互切換
fun getData(): Data { ... }
fun showData(data: Data) { ... }
async(UI) {
val data: Deferred<Data> = bg {
// Runs in background
getData()
}
// This code is executed on the UI thread
showData(data.await())
}
Anko布局預覽插件
通過anko動態(tài)寫的代碼怎么進行預覽呢惰许,Anko提供了一個 Android Studio 插件 (Anko support)來預覽布局:
下面我們介紹 Anko support 的安裝步驟:
-
安裝 File - Setting - 搜索(plugs)- 搜索( Anko support )- 安裝插件 - 重啟Android Studio
-
打開 View - Tool Windows - Anko Layout Preview
工具準備好了,下一篇開始學習Kotlin語法 和 Anko 在項目中的實際應用史辙。
參考
簡書
http://www.reibang.com/p/b7d54ff41c95
http://www.reibang.com/p/20f8016e0545
Anko GitHub https://github.com/Kotlin/anko
Kotlin中文網 https://www.kotlincn.net/