Kotlin入門(2)讓App開發變得更容易

来源:http://www.cnblogs.com/aqi00/archive/2017/06/27/7083534.html
-Advertisement-
Play Games

上一篇文章介紹瞭如何搭建Kotlin的開發環境,可是這個開發環境依然基於Android Studio,而在Android Studio上使用Java進行編碼,本來就是理所應當的,何必還要專門弄個Kotlin,這個Kotlin相比Java到底有哪些好處呢? 我們可以把Kotlin看作是Java的升級版 ...


上一篇文章介紹瞭如何搭建Kotlin的開發環境,可是這個開發環境依然基於Android Studio,而在Android Studio上使用Java進行編碼,本來就是理所應當的,何必還要專門弄個Kotlin,這個Kotlin相比Java到底有哪些好處呢?

我們可以把Kotlin看作是Java的升級版,它不但完全相容Java,而且極大精簡了代碼語法,從而使開發者專註於業務邏輯的編碼,無需在繁瑣的代碼框架之間周旋。當然,若想充分運用Kotlin的優異特性,除了導入Kotlin的核心庫,還得導入Kotlin的擴展庫與Anko庫。具體到編譯配置文件,則要進行以下兩處修改:
1、打開項目的build.gradle,補充添加anko的版本號聲明,以及Kotlin擴展庫的路徑,完整的編譯配置如下所示:

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"
    }
}

2、打開模塊的build.gradle,在文件開頭補充添加Kotlin的擴展插件,配置添加如下:

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的代碼究竟有多麼的簡練。

 

首先在之前的hello模塊包名上右擊,依次選擇彈出菜單“New”——“Kotlin Activity”(也可直接依次選擇頂部菜單“File”——“New”——“Kotlin Activity”),右鍵菜單的截圖如下所示:

選擇菜單後打開Kotlin的Activity創建頁面,單擊“Next”按鈕進入創建信息的填寫頁面,如下圖所示:

這裡填上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的基本語法知識。


__________________________________________________________________________
本文現已同步發佈到微信公眾號“老歐說安卓”,打開微信掃一掃下麵的二維碼,或者直接搜索公眾號“老歐說安卓”添加關註,更快更方便地閱讀技術乾貨。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CSS實現水平垂直居中對齊 在CSS中實現水平居中,會比較簡單。常見的,如果想實現inline元素或者inline block元素水平居中,可以在其父級塊級元素上設置 實現;如果想實現塊級元素的水平居中對齊,可以設置 。而如果想實現垂直居中對齊,或許就不太容易。 以下,我總結了一些實現水平垂直居中對 ...
  • 公司性質的: | 公司 | 地址 | | | | | 美團 | "http://tech.meituan.com/archives" | 個人博客: | 博主 | 地址 (斜體的技術文章較少)| | | | | 王巍(onevcat) | "https://onevcat.com/ blog" | ...
  • 1. 基本功能預覽 2.基本功能 本次封裝的表單組件,分為單行和2行 兩種情況; 兩種組件 都有設置圖片lable、標題 (title)、按提示(hint)、文案(text)、內容距邊間距離(padding)這些通用功能; 其次,單行表單組件 還可以允許文本輸入、設置標題(title),以及文案(t ...
  • 遇到過好多次使用自定義view,修改frame無效問題, 之前都是放棄xib,直接手寫,發現手寫簡單的還行,複雜的UI就坑逼了。所以還是需要用到可視化編輯的xib。 整理一下,自己備忘也供iOS開發的朋友參考: 一般我們會直接這樣寫: 這是我一個項目中的代碼,但是這樣出現了一個問題就是iPhone ...
  • 必備條件: 安裝Node.js 安裝Java JDK(jdk-8u71-windows-x64.exe),註意:版本必須要1.8+ 安裝綠色版AndroidSDK (ADK編譯) AndroidSDK添加環境變數 在Path系統變數中添加如下配置: %ANDROID_HOME%\platform-t ...
  • 近期逆向一個程式,需要把bne.w改成b,無條件跳轉。由於ios逆向不像pc上,可以在od里直接改彙編指令,這篇文章給了我很大的幫助。通過memory write 修改後,驗證可行後,再用ultraedit修改二進位文件,保存可執行程式。再拷貝到ios設備,即可。 文章出處:http://blog. ...
  • 昨天在研讀 NS5S1153 的 spec, 發現有一個詞 很陌生 DPDT, 原來是 double pole double throw 的縮寫,雙軸雙切, Reference http://blog.xuite.net/auster.lai/twblog/433393966 https://www ...
  • https://tw.transcend info.com/Support/FAQ 940 以下的內容皆來自上面這個網址。 什麼是USB 3.1? 什麼是USB 3.1? USB 3.1為USB協會制定的新規範,分別為USB 3.1 Gen1和Gen2 USB 3.1 Gen1 (SuperSpee ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...