安卓 kotlin如何抽取kotlin 启动activityy基类

& & Kotlin是一门基于JVM的编程语言,它正成长为Android开发中用于替代Java语言的继承者。Java是世界上使用最多的编程语言之一,当其他编程语言为更加便于开发者使用而不断进化时,Java并没有像预期那样及时跟进。
& & Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而Android&Studio是基于IntelliJ修改而来的。Kotlin是一门包含很多函数式编程思想的面向对象编程语言。
  Kotlin生来就是为了弥补Java缺失的现代语言的特性,并极大的简化了代码,使得开发者可以编写尽量少的样板代码。
据说是Android下的swift语言,而且是有jetBrains出品,有这么强大的IDE支持,一定错不了。
AndroidStudio安装Kotlin开发插件:
点击“Install JetBrains plugin”
输入kotlin搜索,安装下面那个Kotlin Extension For Android插件,安装后重启AS。
创建KotlinActivity:
新建Android工程,这一步和以前创建安卓工程的步骤类似,这个时候工程里面也没有跟kotlin有半毛钱的关系。
只不过在工程创建完成后,再新建Activity的时候选择KotlinActivity:
不带分号结束的看起来就是舒服,习惯了Lua和Python。
自动创建的界面布局文件和之前的没什么区别,依然是xml格式的。同时manifest里也会自动添加该Activity的声明。
配置gradle:
如果IDE提示需要配置Kotlin的时候,就点击配置就好了,会自动在project和module的build.gradle里配置好。如果是手动配置的话,请在project的build.gradle里配置:
buildscript { ext.kotlin_version = '1.0.2'repositories {
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'classpath &org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version&// NOTE: Do not place your applicati they belong
// in the individual module build.gradle files}}
在module的build.gradle里配置:
apply plugin: 'com.android.application'apply plugin: 'kotlin-android'android {
compileSdkVersion 23buildToolsVersion &23.0.2&defaultConfig {
applicationId &com.example.demo_yunbu&minSdkVersion 15targetSdkVersion 23versionCode 1versionName &1.0&}
buildTypes {
minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'}}dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'compile &org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version&}repositories {
mavenCentral()}
最后IDE提示Sync&Now,用用这些修改就好了。
最后我们在布局文件中添加一个TextView来演示控件的操作:
&TextViewandroid:layout_width=&wrap_content&android:layout_height=&wrap_content&android:id=&@+id/tvMessage&/&
然后在Activity代码里就可以直接使用变量tvMessage了,如果有如下提示:
只需要按Alt+Enter导入布局文件的引用即可,自动导入:
import kotlinx.android.synthetic.main.activity_main.*
然后可以直接使用变量tvMessage进行操作了,非常方便,再也不用每个控件用findViewById查找一遍了。
以下是完整的代码:
package com.example.hellokotlinimport android.content.Intentimport android.support.v7.app.AppCompatActivityimport android.os.Bundleimport kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)tvMessage.text = &hello kotlin!&;btnOpenActivity2.text = &OpenActivity2&btnOpenActivity2.setOnClickListener({ startActivity(Intent(MainActivity@this, SecondActivity::class.java)) })
把之前的java代码转换为Kotlin:
前面新建android工程的时候因为MainActivity并不是KotlinActivity,因此需要转换一下,
选择菜单Code-&Convert&Java&File&to&Kotlin&File
除了文件内容改变之外,文件的扩展名也从.java变为了.kt。
编译,出现错误:
Error:(6,&8)&Unresolved&reference:&kotlinx
Error:(13,&9)&Unresolved&reference:&tvMessage
Error:Execution&failed&for&task&':app:compileDebugKotlin'.
&&Compilation&error.&See&log&for&more&details
提示缺少kotlin,需要手动配置一下,在module的build.gradle里添加:
buildscript {
repositories {
dependencies {
classpath &org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version&}}
修改完成后Sync&Now一次,编译通过,运行效果:
点击按钮后打开一个空白的页面,这里就不截图了。
使用anko创建界面:
前面的界面全部继续使用了XML来创建的,这里演示下使用anko创建界面。
首先配置gradle,在project的gradle里buildscript添加:
ext.anko_version = '0.8.2'
再在module的gradle里dependencies添加:
// Ankocompile &org.jetbrains.anko:anko-common:$anko_version&compile 'org.jetbrains.anko:anko-sdk15:0.8.2' // sdk19, sdk21, sdk23 are also availablecompile 'org.jetbrains.anko:anko-support-v4:0.8.2' // In case you need support-v4 bindingscompile 'org.jetbrains.anko:anko-appcompat-v7:0.8.2' // For appcompat-v7 bindings
最后Sync&Now,成功后编辑SecondActivity的代码:
package com.example.hellokotlinimport android.support.v7.app.AppCompatActivityimport android.os.Bundleimport org.jetbrains.anko.*class SecondActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)//
setContentView(R.layout.activity_second)verticalLayout {padding = dip(30)editText {hint = &Name&textSize = 24f}editText {hint = &Password&textSize = 24f}button(&Login&) {textSize = 26fonClick { toast(button@this.text) }
这里注释掉了原来由setContentView来设置的xml布局,而使用了代码直接创建,使用起来简单直接了,但是缺点也很明显,不能做到界面设计阶段的实时预览效果,很难做到所见即所得,好在xml还能继续支持。
运行看下效果,点击主界面的按钮打开第二个页面:
点击Login按钮弹出一个土司,文本就是该按钮的文本。
本文已收录于以下专栏:
相关文章推荐
使用Kotlin开发Android应用初体验昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢?Kotlin的简要介绍在开发之前,很...
Android之Kotlin初探文章链接知识点
Kotlin的简介;
Kotlin和Java的关系;
Kotlin在as的开发环境配置;
Kotlin实例讲解;
5. 新名词记录{Kotlin}概述在...
Kotlin是Google推荐的Android开发语言,相对于java,kotlin的代码更加简洁。kotlin可以结合anko实现xml布局的功能,可以结合kotterknife,RxKotlin提...
Anko是什么?
原话是这么说的:
Anko is a Kotlin library which makes Android application development faster and ea...
Android_Kotlin 使用Kotlin实现Android HttpURLConnection 网络请求、Handler Message更新UI
Kotlin Android Extensions是另一个Kotlin团队研发的插件,让我们用更少的代码来开发程序 。
当前仅仅包括了view的绑定。该插件自动创建了很多的属性来让我们直接访问XML...
从开发者角度解析 Android N 新特性!
kotlin让android开发更简单
前言嗯,然后的然后,今天有Qcon大会哈,很不错哈,公司有5张门票,嗯,明天过去看看。Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。Kotlin可以编译成Java字节...
本文为自己学kotlin时的一些笔记Kotlin的特色
Kotlin作为Java的改良,在Android开发中有很多优势,我们先从相对直观的界面绘制开始了解,然后看看Kotlin的语法特点,再慢慢...
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)今天看啥 热点:
kotlin-for-android简介 (让你的Android代码更简洁),kotlinandroid
原文链接 : Kotlin for Android (I): Introduction
译者 : canglangwenyue
校对者: Mr.Simple
Kotlin是众多基于JVM的语言之一,它一开始是作为android 开发中java语言的可能的代替者出现的。java是世界上使用最多的语言之一,而伴随着其他语言的发展使得程序员编程越来越容易,但是java并没有尽快地向预期目标发展。
Kotlin简介
Kotlin是JetBrains创造的基于JVM的语言,JetBrains是IntelliJ的缔造团队。
Kotlin是一个拥有很多函数编程特点的面向对象的编程语言。
为什么要用Kotlin
我首先声明我并没有使用Kotlin很长时间,我几乎是在学习的同时写了这些文章的。我并没有尝试任何其它的替
代语言,例如Go和Scala,所以如果你是真的考虑换一种开发语言的话,我建议你去搜索一下其他人对这些
语言的评价。一个使用Scala开发android的例子可以在[47deg Github site](http:/
47deg.github.io/translate-bubble-android/)找到。
以下是我选择学习Kotlin的原因:
学习曲线相对较快:以Scala作为例子进行比较,我们是向着更简单的方向前进。Kotlin有更多的限制,但是如果你没有学习过一门现代编程语言的话,Kotlin更容易学习。
轻量级:与其他语言相比Kotlin的核心库更小。这很重要,因为android函数数量限制(函数数量不能大于64k)是一个问题,虽
然有一些选择来解决这个问题,例如proguard 或 multidexing,但是这些解决方案会加复杂度,并导
致调试时花费更多的时间。引入Kotlin核心库添加了不到7000个方法,大致和support-v4一样。
高交互性:Kotlin和其它java库协调使用的特别好,并且交互操作很简单。这是Kotlin团队
在开发新语言是的主要理念之一。他们想在使用Kotlin开发时并不用重写之前所有用java写的代码,所以,Kotlin和java交互的能力必须非常高。
与AS和Gradle完美结合:我们有一个IDE的插件和另一个属于Grade的插件,因此,用Kotlin进行
android编程并不困难。
在开始任何争论之前我建议你看一下Jake Wharton写的一个有趣的文档the use of Kotlin for Android development。
Kotlin的优点
1. 可读性更高,更简洁
使用Kotlin,可以更容易的避免创建模版型代码,因为大多数经典的情景都默认包含在Kotlin中。
例如,在java中,我们想要创建一个典型的data class时需要这样做:
public class Artist {
private long
public long getId() {
public void setId(long id) {
public String getName() {
public void setName(String name) {
this.name =
public String getUrl() {
public void setUrl(String url) {
this.url =
public String getMbid() {
public void setMbid(String mbid) {
this.mbid =
@Override public String toString() {
return "Artist{" +
"id=" + id +
", name='" + name + '\'' +
", url='" + url + '\'' +
", mbid='" + mbid + '\'' +
那么在Kotlin需要多少代码呢?仅仅是下面这个简单的数据类:
data class Artist(
var id: Long,
var name: String,
var url: String,
var mbid: String)
2. 空指针安全
当我们用java开发时,我们的大多数代码是要进行类型检查的,如果我们不想出现**unexpected
NullPointerException**的话,我们就要在运行代码之前持续的检查是否有对象为null。Kotlin,和其它语
言一样,是空指针安全的,因为我们可以通过安全的调用操作来准确的声明一个object可以为null。
我们可以这样做:
var notNullArtist: Artist = null
var artist: Artist? = null
artist.print()
artist?.print()
if (artist != null) {
artist.print()
artist!!.print()
val name = artist?.name ?: "empty"
3. 扩展方法
我们可以给任何类添加新方法。这比我们在project中使用的工具类可读性更高。例如:我们可以给Fragment添加一个新方法来显示Toast。
fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
Toast.makeText(getActivity(), message, duration).show()
我们可以这样使用:
fragment.toast("Hello world!")
4. 支持函数式编程
如果我们可以不用在我们需要的时候每一次都创建一个listener,就像创建一个click listener那样的操作,
而是仅仅定义我们想要做什么?这种想法的确可以实现,它的实现得益于**lambda**d的使用:
view.setOnClickListener({ toast("Hello world!") })
Kotlin目前存在的限制
Kotlin 依旧在发展,虽然它相对稳定,并且final release版本就很快发布,但是Kotlin在进行android相关开发的时候还是有些限制的。
交互性与自动代码生成:一些有名的android Libraries,例如Dagger 或 Butterknife,他们依赖于自动
代码生成,这种情况下如果有名字冲突的话将无法进行代码生成。Kotlin正在解决这个问题,所以这个问题也许
会很快解决。无论如何,我将在接下来的文章里阐明,Kotlin语言的表达能力会让我们觉得不再需要那么多的
Libraries。
声明自定义View比较困难:Kotlin类只能声明一个构造函数,然而自定义View通常需要三个。如果我
们使用代码来创建View的话可以避免这个问题,但对于使用XML文件来声明View的话就不能满足需求了。最容易的变通方式是用java来声明这些
自定义View的实现类,然后通过Kotlin来使用它们。Kotlin团队许诺将在M11 release解决这个问题。
Update: Kotlin M11 is out and now includes secondary constructors
android 下Junit测试:AS 1.1中介绍的新特性并不适用与Kotlin。顺便说说,系统测试和Junit 测试对于纯Kotlin项目是完全可用。
对于android apps 开发,Kotlin是一个非常有趣的java替代者。下一篇文章将会描述如何用Kotlin新建一
个project,和如何更好的适用Kotlin来使得android开发更加简单。敬请关注!
本文来自/bboyfeiyu/android-tech-frontier,欢迎star 、fork。
Android开发技术前线,翻译国外Android优质的技术文章,请关注微信订阅号.
相关搜索:
相关阅读:
相关频道:
Android教程最近更新Kotlin在Android工程中的应用
Kotlin在Android工程中的应用
@author ASCE1885的 Github
简书 微博 CSDN
Kotlin是由JetBrains设计的开放源码的编程语言,它正在Java开发者中变得越来越流行。Kotlin通常
Kotlin在工程中的应用
@author ASCE1885的 Github 简书 微博 CSDN
Kotlin是由JetBrains设计的开放的语言,它正在开发者中变得越来越流行。Kotlin通常被吹捧为Java的继承者,相比较Java而言,Kotlin提供更为丰富的开发经验,因为它更现代,更具表现力和更简介。
如果你在寻求Android开发的可替代编程语言,那么应该试一下Kotlin。使用Kotlin,你可以很容易的在Android工程中替代Java或者与Java混合使用。
本文接下来将介绍在Android Studio工程中如何使用Kotlin和Kotlin插件。
继续本文之前,你首先需要完成如下两件事情:
将你的Andoid Studio更新到最新版本 理解Kotlin的基本语法
如果你不熟悉Kotlin编程语言的话,建议先Kotlin指南中的开始章节。
1. 安装Kotlin插件
在Android Studio的快速开始菜单中,选择Configure&Plugins:
在打开的页面中,点击底部的Install JetBrains plugin…:
在插件列表中选择或者搜索Kotlin Extensions For Android并点击右边窗口的Install Plugin按钮:vcD4NCjxwPjxpbWcgYWx0PQ=="" src="/uploadfile/Collfiles/57.png" title="\" />
由于这个扩展插件依赖于Kotlin插件,因此会弹出一个对话框提示我们同时去下载它,点击Yes按钮开始插件的下载:
当下载安装完成之后,重启Android Studio就可以激活插件了。
2. 创建Kotlin Activity
在Android Studio中,右键单击工程包名在弹出的菜单中选择New&Kotlin File:
在弹出的对话框中,输入Activity的名字并在类型下拉列表中选择Class。我们把名字命名为MainActivity:
当类被创建出来后,你将会看到一个警告,提示你配置app模块来支持Kotlin:
单击警告提示条的链接,在弹出的对话框中点击OK按钮选择默认的Kotlin插件版本即可:
为了配置你的工程支持Kotlin,Kotlin插件修改了build.gradle文件。点击Sync Now按钮就可以应用这些改动了:
到这里,工程的配置完成了。让我们回到刚才创建的Kotlin类来开始Kotlin的编程吧。
3. 使用Kotlin
为了保持例子的简单,我们将展示如何创建一个Activity,它包含一个用于显示String字符串的TextView。
确保你的类继承自Activity,并重写其onCreate函数。当然,你要使用Kotlin的方式实现。如果你还不熟悉Kotlin,建议通过快捷键Control+O来激活Android Studio的代码生成功能,从而得到正确的函数签名:
生成之后,我们的类应该如下所示:
package com.hathy.kotlinsample
import android.app.Activity
import android.os.Bundle
public class MainActivity: Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
使用val关键字创建TextView的一个只读实例:
val myMessage = TextView(this)
调用TextView的setText函数设置要显示的字符串,接着调用setContentView将TextView设置给它:
myMessage.setText("Hello")
setContentView(myMessage)
就像在Java Activity中,你也需要在AndroidManifest.xml文件中声明Kotlin Activity,以便让Android识别到它。假如这是你工程中唯一的Activity,那么manifest文件看起来如下所示:
现在你可以在你的Android设备或者模拟器上运行这个app了。虽然Kotlin编译器比Java编译器稍微慢一点,但你可能察觉不到编译时间的显著变化。
4. 使用Kotlin的Android扩展插件
Kotlin的Android扩展插件使得开发者可以像对待Activity属性一样对待定义在Activity的XML布局文件中的。也就是说,如果使用这个插件,你将不再需要调用findViewById。这些属性因此被称为合成属性(synthetic properties)。
要在项目中使用这个特性,需要在app模块的build.gradle文件中加入org.jetbrains.kotlin:kotlin-android-extensions作为构建脚本依赖。不要忘了点击Sync Now按钮来同步这个改变到工程中:
buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
现在让我们创建一个和前面步骤创建的类似的Activity,但是使用布局XML文件来定义TextView。创建一个布局XML文件并命名为another_activity.xml。在这个文件中,定义TextView,id为myMessage:
新建另一个Kotlin类AnotherActivity,继承自Activity并重写onCreate函数,实现如下所示:
package com.hathy.kotlinsample
import android.app.Activity
import android.os.Bundle
public class AnotherActivity: Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
在onCreate函数中调用setContentView并把刚才创建的布局XML文件设置给它:
setContentView(R.layout.another_activity)
现在,你可以使用下面代码片段导入TextView,而不是使用findViewById的方式:
import kotlinx.android.synthetic.another_activity.myMessage
如果布局文件中存在其他的组件,你可以使用如下语句来一次性全部导入:
import kotlinx.android.synthetic.another_activity.*
现在你可以通过使用id来访问TextView,就像该TextView是Activity类的一个属性一样。例如,修改TextView显示的字符串:
myMessage.setText("Hello")
5. 将Java类转换为Kotlin
我们可以使用Kotlin插件将现存的Java类转换成Kotlin类。为了尝试这个特性,首先创建如下所示的Java类,它是一个打印两个整数之和的简单的Activity:
public class YetAnotherActivity extends Activity {
private int a,b;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("MESSAGE", "The sum is "+(a+b));
使用快捷键Control+Alt+Shift+J,或者选择菜单Code&Convert Java File to Kotlin File:
转换后的Kotlin类如下所示:
public class YetAnotherActivity : Activity() {
private var a: Int = 0
private var b: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("MESSAGE", "The sum is " + (a + b))
除了文件内容改变之外,文件的扩展名也从.java变为了.kt。
本文我们通过在Android Studio中安装Kotlin插件和Kotlin Android扩展插件学到了如何在Android工程中使用Kotlin。由于Kotlin和Java在很大程度上可互操作,如果你还在学习Kotlin,那么最好是逐步在你的Android项目中应用它。
为了学习更多的Kotlin相关知识,我建议浏览Kotlin指南。开始章节将会帮助你尽快熟悉这门新语言。
文末美图鉴赏

我要回帖

更多关于 activity的基类 的文章

 

随机推荐