上一篇文章介紹瞭如何搭建Kotlin的開發環境,但是這個開發環境依然基於Android Studio,而在Android Studio上使用Java進行編碼,原本就是理所應當的,何須還要專門弄個Kotlin,這個Kotlin相比Java到底有哪些好處呢?html
咱們能夠把Kotlin看做是Java的升級版,它不但徹底兼容Java,並且極大精簡了代碼語法,從而使開發者專一於業務邏輯的編碼,無需在繁瑣的代碼框架之間周旋。固然,若想充分運用Kotlin的優異特性,除了導入Kotlin的核心庫,還得導入Kotlin的擴展庫與Anko庫。具體到編譯配置文件,則要進行如下兩處修改:
一、打開項目的build.gradle,補充添加anko的版本號聲明,以及Kotlin擴展庫的路徑,完整的編譯配置以下所示:java
buildscript { ext.kotlin_version = "1.1.2" ext.anko_version = "0.9" repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version" } }
二、打開模塊的build.gradle,在文件開頭補充添加Kotlin的擴展插件,配置添加以下:android
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions'
接着在dependencies節點下補充添加anko插件的編譯說明,以下所示:微信
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.anko:anko-common:$anko_version"
編譯配置修改完畢,接下來咱們嘗試進行簡單的Kotlin編碼,看看Kotlin的代碼究竟有多麼的簡練。app
首先在以前的hello模塊包名上右擊,依次選擇彈出菜單「New」——「Kotlin Activity」(也可直接依次選擇頂部菜單「File」——「New」——「Kotlin Activity」),右鍵菜單的截圖以下所示:框架
選擇菜單後打開Kotlin的Activity建立頁面,單擊「Next」按鈕進入建立信息的填寫頁面,以下圖所示:ide
這裏填上Activity的名稱EasyActivity,對應的佈局文件名則爲activity_easy,最後單擊「Finish」按鈕完成EasyActivity.kt的建立。函數
如今給前面建立的佈局文件activity_easy.xml添加幾個TextView和Button控件,佈局比較簡單就不貼了。由於本文主要介紹Kotlin開發,再也不對Adnroid的Java開發作詳細介紹,因此讀者若是對Android開發還不熟悉的話,建議先根據《Android Studio開發實戰:從零基礎到App上線》一書學習基本的Android開發。佈局
接下來是本文的重點,之前咱們操縱控件之時,都要先經過findViewById方法得到控件對象,而後再調用相關函數設置對象屬性。好比如今有個名爲tv_hello的TextView控件,準備在代碼中把tv_hello的顯示文本改成「你好呀」,這用Java編碼的話便是下面兩行代碼:學習
TextView tv_hello = (TextView) findViewById(R.id.tv_hello); tv_hello.setText("你好呀");
修改文本這個功能,若是用Kotlin實現會是怎麼樣呢?下面就讓咱們實驗一下。首先在EasyActivity.kt代碼開頭補充下面一行:
import kotlinx.android.synthetic.main.activity_easy.*
這行導入語句的目的是引進Kotlin的控件變量自動映射功能,接下來的代碼就無需再調用findViewById方法,直接把控件ID看成控件對象使用便可。好比修改TextView的顯示文本,採用Kotlin編碼只要下面一行:
tv_hello.setText("你好呀")
如此一來,原來的兩行代碼精簡到一行代碼,去掉了原先獲取控件對象的冗餘代碼。然而Kotlin的便利性並不只僅限於此,它對控件甚至都無需調用set***/get***方法,而容許直接修改/獲取控件的屬性值,像設置文本這個功能,能夠繼續簡化爲下面這行代碼:
tv_hello.text = "你好呀"
進一步簡化以後,原代碼的「set」與兩個括號都被去除,可是新代碼反而更容易理解了。
也許有人說,Kotlin在這裏只精簡了一行代碼,不見得比Java有多大優點,那就繼續進行其它常見功能的PK,有道是五局三勝,贏得多才足以服衆。上面的第一局爲修改控件文本的PK,結果是Kotlin小勝;接下來依次再設四局PK,其中第二局爲點擊監聽器的處理。Button是Android的經常使用按鈕控件,代碼中常常要處理Button控件的點擊事件,下面的Java代碼就是響應Button點擊的一個例子:
final Button btn_click = (Button) findViewById(R.id.btn_click); btn_click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { btn_click.setText("您點了一下下"); } });
其實這個響應功能很簡單,僅僅在點擊按鈕之時修改按鈕文本而已,但是由於Java須要實現點擊監聽器,因此無奈還得寫好幾行的匿名類代碼。若是使用Kotlin實現相同的功能,又是怎樣的呢?且看下面的Kotlin代碼:
btn_click.setOnClickListener { btn_click.text="您點了一下下" }
不得了了,Kotlin只需一行代碼就完事,想不到吧,此局Kotlin完勝。
第三局換個Button控件的長按事件,下面的Java代碼是響應Button長按的一個例子:
final Button btn_click_long = (Button) findViewById(R.id.btn_click_long); btn_click_long.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { btn_click_long.setText("您長按了一小會"); return true; } });
能夠看到Java代碼依舊冗長,再看看Kotlin代碼如何接招:
btn_click_long.setOnLongClickListener { btn_click_long.text="您長按了一小會"; true }
Kotlin仍舊一行代碼搞定,真是叫人另眼相看,此局Kotlin依然完勝。
第四局咱不比監聽器了,Java在匿名類這塊很吃虧,那來比另外一種經常使用的Toast提示功能,該功能的Java代碼只有一行:
final Button btn_toast = (Button) findViewById(R.id.btn_toast); btn_toast.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(EasyJavaActivity.this, "小提示:您點了一下下", Toast.LENGTH_SHORT).show(); } });
上面外層的點擊監聽器請忽略,正宗的Toast代碼真的只有一行,且看Kotlin怎麼拆招:
btn_toast.setOnClickListener { toast("小提示:您點了一下下") }
哈哈,Kotlin連同監聽器的代碼,比Java的一行Toast代碼都要少,此局Kotlin繼續小勝。
但是爲啥Kotlin的toast函數不區分顯示時長呢?原來toast方法默認爲短時顯示,即Toast.LENGTH_SHORT。這下Java方竊喜,雖然個人代碼比較長,可是足夠靈活呀,想要短一點就LENGTH_SHORT,想要長一點就LENGTH_LONG。正好第五局比試Toast的長時提示,該功能的Java代碼也只有一行:
final Button btn_toast_long = (Button) findViewById(R.id.btn_toast_long); btn_toast_long.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(EasyJavaActivity.this, "長提示:您長按了一小會", Toast.LENGTH_LONG).show(); return true; } });
如今Kotlin無法調用toast函數了吧,Java洋洋自得總算可以扳回一局,誰料Kotlin大喝一聲「看我來」:
btn_toast_long.setOnLongClickListener { longToast("長提示:您長按了一小會"); true }
真是不曾想到,Kotlin另外有個longToast招式,僅僅多了四個字母而已,因而此局Kotlin理應小勝。
五局PK下來,Kotlin大獲全勝,Java潰不成軍,直教人長噓短嘆「長江後浪推前浪,前浪死在沙灘上」。以上初步介紹了Kotlin的幾種常見用法,從下一篇文章開始,將系統地講解Kotlin的基本語法知識。
__________________________________________________________________________
本文現已同步發佈到微信公衆號「老歐說安卓」,打開微信掃一掃下面的二維碼,或者直接搜索公衆號「老歐說安卓」添加關注,更快更方便地閱讀技術乾貨。