【Kotlin4Android】环境配置 & Hello Kotlin4Android!

前言:

最近Kotlin一定是程序员(尤其是Android开发们)间最热传的事儿了,Google IO大会钦定Kotlin为Android开发的官方语音,想必Kotlin火起来也只是时间问题了。恰好最近工作不忙,就抽时间来研究一下,同时在此写个博客记录一下,希望自己可以坚持下来。废话不说,下面开始。


首先,环境配置

Android studio 3.0 preview自带支持Kotlin,所以如果有兴趣可以直接去下载个preview安装使用,预览版可以与稳定版共存,需要一些小操作,具体操作在Google下载页有介绍。点击这里

3.0以下版本想使用Kotlin也是可以的,安装个插件就好。具体方法如下图:
Preferences>Plugins(Mac)Preferences>Plugins(Mac)
搜索Kotlin并安装搜索Kotlin并安装
安装完成后需要重启AS。环境配置完成。


第二波,Hello Kotlin4Android

AS 3.0 proview我们可以直接new一个Kotlin项目,如下图:
勾选include Kotlin support勾选include Kotlin support
AS 3.0以下也没关系,可以在项目里创建Kotlin相关文件,然后应用到整个项目或个别modules。如下图:
随便选择一个Kotlin相关文件创建随便选择一个Kotlin相关文件创建
创建后会提示configure,这里看情况选择创建后会提示configure,这里看情况选择
等待bulid完成。

强烈建议要配置的东西,用于省略findViewById()直接使用控件id等快捷代码:

apply plugin: 'kotlin-android-extensions'

这里推荐添加anko库,具体功能介绍参见GitHub。总之很有用,加上就是。

dependencies {
    ......
    // Anko
    compile 'org.jetbrains.anko:anko-sdk19:0.10.0' // sdk19, sdk21, sdk23 are also available
    compile 'org.jetbrains.anko:anko-appcompat-v7:0.10.0' // For appcompat-v7 bindings
    compile 'org.jetbrains.anko:anko-support-v4:0.10.0' // In case you need support-v4 bindings
    ......
}

建议将kotlin和java区分开,在建一个一样的包,如图:区分java和kotlin
需要注明kotlin路径:

android {
    ......
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin' // 注明Kotlin路径
    }
    ......
}

配置结束,下面开始撸代码吧。

首先说几点,kotlin语法和java很像,用到了很多Lambda表达式。关于Lambda,我自己以前用的也很少,也没理解,不做解释。但个人觉得,kotlin和js看起来还是有一定相似之处的。kotlin语法中换行不用写分号,同行需要写分号分割语句。kotlin相比java,代码上实在是简洁了太多。各种优点网上随便搜出一大堆文章,当然很多都是一样的。

下图,我已经创建了kotlin文件夹并注明了路径,包名和java下的相同,这里新建了Kotlin Activity,KotlinMainActivity.kt。注意看可以发现kotlin文件的图标有个K样式的下标。
这里写图片描述
在Manifest中将入口指向为KotlinMainActivity。

KotlinMainActivity.kt:

package com.parfois.hellokotlinandroid

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class KotlinMainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textview.text = "Hello Kotlin4Android!"
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

</LinearLayout>

以上是kotlin代码设置textview文本,而如果是java,我们要这样写:

 TextView textview =(TextView) findViewById(R.id.textview);
 textview.setText("Hello Kotlin4Android!");

看起来只是2行变成了1行。但这样理解一下,Java是先找到控件,强转成TextView类型,赋值给textview变量,然后setText。而Kotlin,直接就是给textview.text赋值。这里暂且不管这两者底层实现的异同,作为程序员,我们要做的事情,从4步(Java)变成了1步(Kotlin)。

是不是很diao炸天?

还有更多类似的简洁的地方。比如点击事件:

        //kotlin 代码
        textview.setOnClickListener { Log.i("log", "触发点击事件") }
        textview.setOnClickListener { v -> Log.i("log", "触发点击事件--控件id=" + v.id) }


        // java 代码
        textview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("log", "触发点击事件");
            }
        });
        textview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("log", "触发点击事件--控件id=" + v.getId());
            }
        });

还有个特别好用的功能,函数扩展,我们新建kt文件,上面我已经创建好了,Tools.kt:

package com.parfois.hellokotlinandroid

import android.content.Context
import android.widget.Toast

/**
 * Created by parfoismeng on 2017/5/19.
 */
fun Context.toast(msg: String) {
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
}

Kotlin中,上面这样写是全局生效,所有Context类中都可以使用该函数。如果包装在class里,则只在该class生效。调用示例:

        textview.setOnClickListener { toast("这是toast") }

目前就先这些,上面引入的anko并没有介绍到,下一篇说一下如何不用xml编辑布局,直接在代码中使用anko书写布局。

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值