Kotlin開發Android專案簡單demo,不僅僅是Hello World

weixin_34075551發表於2017-05-19

上一篇文章寫道如何在AndroidStudio上面安裝Kotlin外掛,併成功編譯。在網上很多入門教程到這裡就停止了,導致很多人一頭霧水不知道該如何進行下去。今天這一篇依舊是入門,但是這將是可以更好舉一反三的demo,希望可以給大家帶來一點啟發。

1.建立專案

首先我們需要新建一個Kotlin專案,然後新增兩個Kotlin類和相對應的的佈局檔案
這個很簡單看一下圖就好了


2802344-bdd10cac2c9380e3.png
專案結構

因為後面會涉及到兩個Activity之間的跳轉,所以提前在AndroidManifest.xml裡配置一下Activity,和傳統方式一樣,為了更直觀程式碼如下

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yy.study.kotlin">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".LoginActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        //此處為RegisterActivity
        <activity android:name=".RegisterActivity"></activity>
    </application>

</manifest>

接下來,我們說說這一次demo的功能。非常簡單
1.在登入頁面對輸入的使用者名稱和密碼進行判斷,然後點選登入按鈕提示是否成功。
2.點選註冊跳轉到註冊頁面,然後再返回到登入頁面,
我們先來看看頁面。由於註冊頁面就一個標題,所以下邊只放登入頁面。


2802344-35c111249cfb676e.png
登入頁面

悄悄告訴你們,這是我剝離的專案裡面登入頁面。所以低調低調。。。打槍滴不要,悄悄滴進村。。。

2.程式碼編寫

在進過上面的瞭解後,終於要開始擼程式碼了。我們先把這些控制元件在Activity裡面去例項化吧。說到例項化,Kotlin的寫法就有所不同了,我將展現兩種常用的寫法
第一種方法

class LoginActivity : AppCompatActivity(){

    /**
     * lateinit表示修飾不可空的型別(注意:不能修飾基礎型別,int、double等)
     */
    //手機號碼
    private lateinit var inputPhone: EditText
    //密碼
    private lateinit var inputPassword: EditText

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        init()
    }

    fun init(){
        inputPhone.findViewById(R.id.input_phone)
        inputPassword.findViewById(R.id.input_password)
    }

}

上面看了第一種方法,感覺差距不是太大,和傳統的方式十分相近。但是這並不能表現出Kotlin的優勢,下面我們看看第二種。使用第二種方法首先要在Module的build.gradle裡新增一行配置,再點選Sync Now。

apply plugin: 'kotlin-android-extensions'

完了之後就是見證奇蹟的時刻了,不要什麼findViewById,不要什麼註解。睜大眼睛。

class LoginActivity : AppCompatActivity(){


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        init()
    }

    fun init(){
        login_title.text = "改變登入頁面的標題"
    }

}

哈哈哈,是不是很6666的感覺。有了這個外掛,只需要在Activity裡直接使用在佈局檔案裡設定的ID名就可以進行操作了,我這是簡單的改變了一下登入頁面的標題。細心的同學會發現這樣會有settext卻沒有gettext了,這裡我要強調一下.text是會自動轉換的,它會根據你是否賦值來判斷set和get

2802344-9cc1dddee0391836.png
set

2802344-cf1db61002d43e9e.png
get

好了扯了這麼多淡,接下來我們使用第二種方法來完成開頭提到的功能吧,話不多說直接上程式碼!!!

package com.yy.study.kotlin

import android.content.Intent
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_login.*

/**
 * @titke : 登入頁面
 * @date : 2017/5/19
 * @author : emF
 */
class LoginActivity : AppCompatActivity(),View.OnClickListener{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)
        init()
    }

    fun init(){
        login_submit.setOnClickListener(this)
        register.setOnClickListener(this)
    }

    /**
     * 事件監聽
     */
    override fun onClick(v: View?) {
        /**
         * 這裡的 v.id 和 v.getId 意思一樣,?表示當某個變數的值可以為 null 的時候,必須在宣告處的型別後新增 ?來標識該引用可為空
         * 在 Kotlin 裡 switch 被 when替換,具體參考 Kotlin 開發文件
         */
        when(v?.id){
            R.id.login_submit -> {
                //宣告兩個可變變數
                var phoen : String
                var pwd : String
                //獲得輸入的使用者名稱和密碼
                phoen = input_phone.text.toString().trim()
                pwd = input_password.text.toString().trim()
                //對使用者名稱和密碼進行判斷
                if(!phoen.equals("1234567890") || !pwd.equals("123456")){
                    Toast.makeText(this,"使用者名稱或密碼錯誤",Toast.LENGTH_LONG).show()
                }else{
                    Toast.makeText(this,"登入成功",Toast.LENGTH_LONG).show()
                }
            }
            R.id.register -> {
                /**
                 * 建立一個 Intent 類的例項
                 * 注意:在 Kotlin 裡沒有 new 關鍵字
                 * ::雙冒號是 JDK1.8 的新特性,表示方法引用
                 */
                var intent = Intent()
                intent.setClass(this,RegisterActivity::class.java)
                startActivity(intent)
            }
        }
    }
}
package com.yy.study.kotlin

import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import kotlinx.android.synthetic.main.activity_register.*

/**
 * @titke : 註冊頁面
 * @date : 2017/5/19
 * @author : emF
 */
class RegisterActivity : AppCompatActivity() , View.OnClickListener{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_register)
        init()
    }

    fun init(){
        register_close.setOnClickListener(this)
    }

    /**
     * 事件監聽
     */
    override fun onClick(v: View?) {
        when(v?.id){
            R.id.register_close -> finish()
        }
    }
}

到此為止,這個簡單的demo就結束了。中間的功能很簡陋,不過相信各位同學都能舉一反三,不會舉一反三的程式猿不是好猿。值得注意的是這中間有一些地方還是產生了不小的變化,不過我都註釋出來了。覺得還不錯的用贊戳我吧!!!

相關文章