Android开发之kotlin实现(体验)
虽然工作很久了但是第一次写博客,每次动手去写东西感觉自己要表述的东西网上一搜有好多(可能几篇东西凑到以前满足自己的需要),最近从Google大会了解到kotlin语言也感觉它的发展很有市场,看了官方的文档自己感觉可以试试这门语言,所以自己写了一个小的demo试试它,其中包含可Android中的基本用法,闲话不说直接开整:
- 环境的搭建
3.0以下的Android Studio版本(3.0自带kotlin插件)
目前只探索了Android Studio上使用,其实Android Studio也是基于kotlin语言开发团队开发的IDE上完善的软件开发工具
1.需要安装kotlin语言的插件File——>settings——>plugins——>搜索框中输入Kotlin——>搜索——>然后安装——>关闭重启(重启完就可以开始开发了)
- 开始我们的安卓项目
创建项目(和平常我们创建项目一样就可以了)
修改配置:创建完项目还要一点点小小的配置才能使用kotlin语言语言开发
1.项目根目录下的build.gradle 文件中添加
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4" (1.1.2-4为kotlin版本号)
如下:
dependencies {
classpath 'com.android.tools.build:gradle:2.2.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.2-4" }
2.app目录下的build.gradle 文件中添加
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
和compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
添加地方如下图:
到这来我们对与kotlin的相关配置完成就可以进行代码的写了。
- 案例代码实现
MainActivity代码实现如下
import android
.content.Context
import android
.content.Intent
import android
.os.Bundle
import android
.support.v7
.app.AppCompatActivity
import android
.view.View
import
com.project.lp.kotlindemo.Time.VerticalTimeLineActivity
import kotlinx
.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() ,View
.OnClickListener {
private var mContext: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContentView(R
.layout.activity_main)
mContext = this
//kotlin中可以直接用不用findViewById() 但是使用是需要导入import kotlinx
.android.synthetic.main.activity_main.*
btn_time_line
.setOnClickListener(this)
}
override fun onClick(v: View) {
// TODO Auto-generated method stub
when (v
.id) {
R
.id.btn_time_line -> {
//声明一个变量
intent = Intent(mContext, VerticalTimeLineActivity::class
.java)
startActivity(intent)
}
else -> {
}
}
}
VerticalTimeLineActivity代码实现如下
import android.app.Activity
import android.os.Bundle
import android.widget.ListView
import com.project.lp.kotlindemo.R
import java.util.*
/**
* 横向的进度显示
* @author Administrator
*/
class VerticalTimeLineActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.vertical_time_line_activity)
val listView =
this.findViewById(R.id.listview) as ListView
listView.dividerHeight =
0
val timelineAdapter = TimelineAdapter(data,
this)
listView.adapter= timelineAdapter
}
private val data: List<Schedule>
get() {
val list = ArrayList<Schedule>()
for (i in
0..9) {
val schedule = Schedule()
schedule.context =
"测试数据" + i
val dt = Date()
val time = dt.time + i *
10000
schedule.Time = time
list.add(schedule)
}
return list
}
}
Adapter代码实现如下(之前写的一个demo直接搬过来的)
abstract class MyBaseAdapter<T>(protected var list: List<T>?, protected var context: Context) : BaseAdapter() {
override fun getCount(): Int {
// 重要:
if (list != null && list!!
.size >
0) {
return list!!
.size
} else {
return
0
}
}
override fun getItem(position: Int): T {
return list!![position]
}
override fun getItemId(position: Int): Long {
return position
.toLong()
}
}
import android
.annotation.SuppressLint
import android
.content.Context
import android
.graphics.Color
import android
.view.LayoutInflater
import android
.view.View
import android
.view.ViewGroup
import android
.widget.TextView
import
com.project.lp.kotlindemo.MyBaseAdapter
import
com.project.lp.kotlindemo.R
import java
.text.SimpleDateFormat
import java
.util.*
class TimelineAdapter @SuppressLint(
"SimpleDateFormat")
constructor(list: List<Schedule>, context: Context) : MyBaseAdapter<Schedule>(list, context) {
private val sdf: SimpleDateFormat = SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss")
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var view : View
// TODO Auto-generated method stub
//感觉和java一样不
var viewHolder: ViewHolder? = null
if (convertView == null) {
val inflater = LayoutInflater
.from(parent
.context)
view = inflater
.inflate(R
.layout.listview_item, null)
}else {
view = convertView
}
viewHolder = ViewHolder
.getHolder(view)
val titleStr = super
.list!![position]
.context
if (position ==
0) {
viewHolder
.view_top_line
.setBackgroundColor(Color
.parseColor(
"#00000000"))
} else {
viewHolder
.view_top_line
.setBackgroundColor(Color
.parseColor(
"#A6A6A6"))
}
if (null != super
.list && super
.list!!
.size >
0 && position == super
.list!!
.size -
1) {
viewHolder
.view_bottom_line
.setBackgroundColor(Color
.parseColor(
"#00000000"))
} else {
viewHolder
.view_bottom_line
.setBackgroundColor(Color
.parseColor(
"#A6A6A6"))
}
viewHolder
.title.text = titleStr
viewHolder
.tv_time
.text = sdf
.format(Date(super
.list!![position]
.Time))
return view
}
internal class ViewHolder(convertView: View) {
var view_top_line: View
var view_bottom_line: View
var title: TextView
var tv_time: TextView
init {
view_top_line = convertView
.findViewById(R
.id.view_top_line) as View
view_bottom_line = convertView
.findViewById(R
.id.view_bottom_line) as View
title = convertView
.findViewById(R
.id.title) as TextView
tv_time = convertView
.findViewById(R
.id.tv_time) as TextView
}
companion object {
fun getHolder(convertView: View): ViewHolder {
var holder: ViewHolder? = null
//判空操作
if(null != convertView
.tag){
//没有判空操作直接强转是如果为空就会类型错误
holder = convertView
.tag as ViewHolder
}
if (holder == null) {
holder = ViewHolder(convertView)
convertView
.tag = holder
}
return holder
}
}
}
}
第一次技术文档写希望对您有用,也希望您题出宝贵的建议
中文官网
demo下载连接