bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

詳解Kotlin和anko融合進行Android開發

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文件中是這樣描述的:

  1. 不安全
  2. 沒有空安全
  3. 迫使你為了每一個布局去寫很多相似甚至重復的代碼
  4. XML在設備上浪費CPU時間和電量(應該是需要進行解析的原因) 不允許代碼重用(沒有完全理解,可能說的不是include標簽而是自定義的layout)
  5. 至于Contract接口以及實體對象,可以直接使用Kotlin編寫,第一為了語法簡潔,第二不用寫一大堆setter/getter方法。

具體的,首先編寫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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設