kotlin是一門基于jvm的編程語言,最近進行了關于kotlin和 anko的研究。并且結合現在的APP設計模式,設想了初步的開發方式。并且準備應用在新的項目中。
創新互聯公司是一家專業提供盈江企業網站建設,專注與網站設計制作、成都網站設計、H5網站設計、小程序制作等業務。10年已為盈江眾多企業、政府機構等服務。創新互聯專業網站制作公司優惠進行中。
Kotlin和anko
Kotlin是大名鼎鼎的JB公司開發的jvm語言,官網地址為;http://kotlinlang.org/
官網的介紹為:
Statically typed programming language for the JVM, Android and the browser
Kotlin的設計思想非常的輕量,盡可能的去復用java代碼,不到萬不得已的時候,一般不會自己去實現一套大而全的庫。這使得Kotlin非常的輕量,集成到Android的project并不會很明顯的影響最終的打包大小。
關于Kotlin的優點,自己總結了幾點:
1,和Java的無縫調用,這在初期不需要投入非常大的精力,即使遇到搞不定的坑,也不必擔心影響業務開發的進度,直接換成java就好了。
2,大量的語法糖,使得代碼非常的簡潔,熟悉之后的開發效率也要高于Java。例如擴展函數,簡單的封裝再也不需要寫一大堆Utils工具類,直接靈活的給某些類添加擴展方法就可以了。例如:
inline fun Activity.toast(message : Int) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
這樣在Activity類中就多出了一個toast方法,實際上在anko中,也有大量已經寫好的擴展方法,可以直接使用DSL語法去寫UI。再例如when語句的寫法:
when(x) { 1-> {} 2-> {} }
很明顯,相比傳統的Java寫法,使用anko后,語言更加簡潔。
switch(x) { case 1: break; case 2: break; default: break; }
3,更加安全,Kotlin似乎比較想消滅空引用,在Java中,調用一個null對象會拋出NullPointException,在Kotlin中,不能為空的對象,例如String對象,會寫成:
var a: String? = "abc"
4,良好的生態環境和開發社區。Kotlin目前還是屬于比較新的技術,很多人也都在嘗試它的有點。包括Rx系列也出了RxKotlin,既RxJava的Kotlin版
Kotlin和Anko使用
Anko的github地址為https://github.com/Kotlin/anko。集成anko的步驟如下:
首先在project的build文件加入如下代碼:
dependencies { classpath 'com.android.tools.build:gradle:2.2.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" //這是需要你加入的 } allprojects { repositories { jcenter() maven {url 'https://dl.bintray.com/jetbrains/anko'} //這是你需要加入的 } }
然后,在你app moudle的build文件里面添加依賴:
compile "org.jetbrains.anko:anko-sdk15:0.9.1" // So here it's 15 too compile "org.jetbrains.anko:anko-appcompat-v7:0.9.1" compile "org.jetbrains.anko:anko-design:0.9.1" compile "org.jetbrains.anko:anko-recyclerview-v7:0.9.1"
根據kotlin的優勢,選擇使用anko進行編寫,不使用xml進行編寫。
這樣的好處在anko的github README文件中是這樣描述的:
具體的,首先編寫MainActivity類,進行UI展示和事件等邏輯。
class MainActivity : AppCompatActivity(), MainContract.View { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } }
接下來在onCreate中編寫ui布局,登錄布局比較簡單,就是2個輸入框和一個按鈕,當然為了試用多點的常見控件,我在最上方添加了Toolbar。
relativeLayout { var mToolbar = toolbar(R.style.Base_ThemeOverlay_AppCompat_Dark_ActionBar) { id = ID_TOOLBAR title = "登錄" backgroundColor = ContextCompat.getColor(this@MainActivity, R.color.colorPrimary) popupTheme = R.style.Base_ThemeOverlay_AppCompat_Light inflateMenu(R.menu.main) setNavigationIcon(R.mipmap.img_back_white) onMenuItemClick { menuItem -> val itemId = menuItem!!.itemId when (itemId) { R.id.menu_main -> { toast(R.string.main_toast) } } false } lparams { width = matchParent height = wrapContent } setNavigationOnClickListener { finish() } } var mUserEdit = editText { id = ID_USER_EDIT hint = "請輸入同戶名" maxLines=1 lparams { width = matchParent height = wrapContent margin=dip(8) centerInParent() } } var mPsdEdit = editText { id= ID_PSD_EDIT hint="請輸入密碼" maxLines=1 maxWidth = 16 lparams { width = matchParent height = wrapContent margin = dip(8) below(ID_USER_EDIT) } } var mButton = button("登錄") { id= ID_BTN_LOGIN onClick { var username = mUserEdit.text.toString() var password = mPsdEdit.text.toString() mPresenter!!.login(username,password) } lparams { width= matchParent height = wrapContent margin = dip(8) below(ID_PSD_EDIT) } } }
代碼中的id使用了常量,在Kotlin中沒有static的概念,但是有一個companion object(伴隨對象)可以模擬實現類似static的功能。
companion object static { val ID_TOOLBAR: Int = 1 val ID_USER_EDIT: Int = 2 val ID_PSD_EDIT: Int = 3 val ID_BTN_LOGIN: Int = 4 }
可以看到,這樣編寫UI的代碼非常的簡潔。而且可讀性非常的高。相信對XML寫布局比較熟悉的同學都能看懂這里面代碼的含義。同時官方還出了一個Android Stduio插件,叫做anko SDL preview。可以很方便的讓開發者預覽編寫的效果。接下來按照MVP的思想, 編寫BaseView和BasePresenter接口。
interface BaseView<T> { fun setPresenter(presenter: T) }
interface BasePresenter
使用Kotlin編寫MainContract接口,這個接口建立起了V層和P層的通信。
interface MainContract { interface View : BaseView<Presenter> { fun login() fun loginNUll() } interface Presenter : BasePresenter { fun login(username: String, password: String) } }
使用Java編寫P層代碼。
public class MainPresenter implements MainContract.Presenter { private MainContract.View mView; public MainPresenter(MainContract.View view) { mView = view; mView.setPresenter(this); } @Override public void login(String username, String password) { if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) { mView.loginNUll(); return; } mView.login(); } }
這里只是模擬了下登錄的邏輯,并沒有去真的實現一個登錄
回到MainActivity,在這里加入我們的代碼。
var mPresenter : MainContract.Presenter? = null
override fun setPresenter(presenter: MainContract.Presenter) { mPresenter = presenter!! }
實現V層應該實現的回調方法:
override fun loginNUll() { toast("用戶名密碼不得為空") } override fun login() { toast("執行登錄邏輯...") }
到這里,我們就完成了Kotlin和anko開發Android的實例,如果想要更加熟練的使用,還需要多加練習。
附:Anko的github地址為https://github.com/Kotlin/anko
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。
標題名稱:詳解Kotlin和anko融合進行Android開發
文章分享:http://vcdvsql.cn/article32/peeesc.html
成都網站建設公司_創新互聯,為您提供自適應網站、用戶體驗、手機網站建設、網站策劃、網站設計公司、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯