zoukankan      html  css  js  c++  java
  • Kotlin入门(2)让App开发变得更容易

    上一篇文章介绍了如何搭建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的基本语法知识。


    __________________________________________________________________________
    本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

  • 相关阅读:
    Oracle基础知识整理
    linux下yum安装redis以及使用
    mybatis 学习四 源码分析 mybatis如何执行的一条sql
    mybatis 学习三 mapper xml 配置信息
    mybatis 学习二 conf xml 配置信息
    mybatis 学习一 总体概述
    oracle sql 语句 示例
    jdbc 新认识
    eclipse tomcat 无法加载导入的web项目,There are no resources that can be added or removed from the server. .
    一些常用算法(持续更新)
  • 原文地址:https://www.cnblogs.com/aqi00/p/7083534.html
Copyright © 2011-2022 走看看