都說kotlin是站在巨人的肩膀上(java),Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類型編程語言,被稱之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開發(fā)并開源。Kotlin 可以編譯成Java字節(jié)碼,也可以編譯成 JavaScript,方便在沒有 JVM 的設(shè)備上運(yùn)行。在Google I/O 2017中,Google 宣布 Kotlin 成為 Android 官方開發(fā)語言。確實(shí),kotlin是非常強(qiáng)大的一門語言,下面我通過一個(gè)例子來給大家簡(jiǎn)闡述它的強(qiáng)大(安卓開發(fā)方面)。
1、kotlin簡(jiǎn)化了很多,下面簡(jiǎn)單舉幾個(gè)例子,kotlin少了findViewById,可以直接用控件的id來進(jìn)行操作,同時(shí)設(shè)置點(diǎn)擊監(jiān)聽也優(yōu)化了,一句代碼搞定button.setOnClickListener { doSomething() },同時(shí)打開startactivity可以這樣寫 startActivity(Intent(this, Main2Activity::class.java)),其他的我就不一 一介紹了,有興趣的小伙伴可以參考官方文檔
class MainActivity : AppCompatActivity() {
? ? ? override fun onCreate(savedInstanceState:Bundle?) {
? ? ? ? ? super.onCreate(savedInstanceState)? ? ? ? ? setContentView(R.layout.activity_main)? ? ? ? ? // No need to call findViewById(R.id.textView) as TextView? ? ? ? ? textView.text = "Kotlin for Android rocks!"
? ? ? ? ? //設(shè)置點(diǎn)擊監(jiān)聽
? ? ? ? ? textView.setOnClickListener {
? ? ? ? ? startActivity(Intent(this,Main2Activity::class.java))//打開新的activity
? ? ? ? ? }
? ? ? }
? }
2、下面寫了一個(gè)小例子,首先定義兩個(gè)抽象類baseActivity和baseFragment來作為activity和Fragment的基類?
BaseActivity.kt
import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.widget.Toast/**
* Created by aiiage on 2018/8/8.
* 定義activity的基類
*/abstract class BaseActivity : AppCompatActivity() {
? ? /**
? ? * 獲取布局id
? ? */? ? protected abstract fun getContentViewLayoutID(): Int
? ? /**
? ? * 初始化控件
? ? */
? ? protected abstract fun initView(savedInstanceState: Bundle?)
? ? override fun onCreate(savedInstanceState: Bundle?) {
? ? ? ? super.onCreate(savedInstanceState)
? ? ? ? if (getContentViewLayoutID()!=0)
? ? ? ? {
? ? ? ? ? ? setContentView(getContentViewLayoutID())
? ? ? ? ? ? initView(savedInstanceState)
? ? ? ? }
? ? }
? ? //Toast彈窗? ? protected fun showToast(desc: String) {
? ? ? ? Toast.makeText(this,desc,Toast.LENGTH_SHORT).show()
? ? }
}
BaseFragment.kt
mport android.os.Bundleimport android.support.v4.app.Fragmentimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroup/**
* Created by aiiage on 2018/8/8.
* Fragment的基類
*/abstract class BaseFragment : Fragment(){
? ? /**
? ? * 獲取布局ID
? ? */? ? protected abstract fun getContentViewLayoutID(): Int
? ? /**
? ? * 界面初始化
? ? */
? ? protected abstract fun init()
? ? override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
? ? ? ? return if (getContentViewLayoutID() != 0) {
? ? ? ? ? ? inflater.inflate(getContentViewLayoutID(), container, false)
? ? ? ? } else {
? ? ? ? ? ? super.onCreateView(inflater, container, savedInstanceState)
? ? ? ? }
? ? }
? ? override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
? ? ? ? super.onViewCreated(view, savedInstanceState)
? ? ? ? init()
? ? }
}
BaseActivity的引用
import android.annotation.SuppressLintimport android.content.Intentimport android.os.Bundleimport android.view.Viewimport com.andream.aiiage.learn.Rimport kotlinx.android.synthetic.main.activity_main.*@Suppress("UNUSED_EXPRESSION")
class MainActivity : BaseActivity(), View.OnClickListener {
? ? /**
? ? * 控件點(diǎn)擊事件監(jiān)聽
? ? */? ? @SuppressLint("SetTextI18n")
? ? override fun onClick(p0: View) {
? ? ? ? when (p0.id) {
? ? ? ? ? ? R.id.hello -> {
? ? ? ? ? ? ? ? hello.text = "hello,kotlin"? ? ? ? ? ? ? ? showToast("welcome")
? ? ? ? ? ? }
? ? ? ? ? ? R.id.startNextActivity->{
? ? ? ? ? ? ? ? startActivity(Intent(this, Main2Activity::class.java))
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? /**
? ? * 返回布局id
? ? */? ? override fun getContentViewLayoutID(): Int {
? ? ? ? return R.layout.activity_main
? ? }
? ? /**
? ? * 控件的初始化
? ? */? ? override fun initView(savedInstanceState: Bundle?) {
? ? ? ? hello.setOnClickListener(this)
? ? ? ? startNextActivity.setOnClickListener(this)
? ? }
}
BaseFragment的引用
import com.andream.aiiage.learn.Rimport kotlinx.android.synthetic.main.first_fragment_layout.*/**
* Created by aiiage on 2018/8/8.
* firstFragment
*/class FirstFragment : BaseFragment(){
? ? override fun getContentViewLayoutID(): Int {
? ? ? ? return R.layout.first_fragment_layout
? ? }
? ? override fun init() {
? ? ? ? firstFragmentText.text="firstFragmentText"? ? }
}
3、效果圖?

4、總結(jié):kotlin使得安卓開發(fā)的代碼變得簡(jiǎn)潔起來,方便維護(hù)閱讀,效率高,提高開發(fā)速度。?
5、源碼:https://download.csdn.net/download/qq_36480491/10590490