Kotlin&Anko基础教程大全 一

来源:互联网 发布:hbo 知乎 编辑:程序博客网 时间:2024/06/11 06:19

对于Kotlin的环境配置我就不说了,不知道的朋友可以看以下链接
Kotlin学习过程 一 Kotlin插件安装和第一个Kotlin app - z979451341的博客 - CSDN博客
http://blog.csdn.net/z979451341/article/details/73028391
在module的build.gradle里加

compile 'org.jetbrains.anko:anko-sdk15:0.8.3' // sdk19, sdk21, sdk23 are also availablecompile 'org.jetbrains.anko:anko-support-v4:0.8.3' // In case you need support-v4 bindingscompile 'org.jetbrains.anko:anko-appcompat-v7:0.8.3' // For appcompat-v7 bindings

Anko的作用就是代替xml,我们使用Anko来完成布局
1 。 先让我们写一个最简单的例子来了解Anko的代码风格

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        verticalLayout {            button("Ok")            button("Cancel")        }    }}

这个例子非常简单,没有什么代码,都是button(“”),甚至可以button(),而这样的使用对象有TextView, EditText, Button , ImageView。这样的配置默认是android:layout_width=”match_parent”
android:layout_height=”wrap_content”
还有就是verticalLayout相当于vertical的LinearLayout

2 .让我说一下关于控件的Layouts 和 LayoutParams属性

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        linearLayout {            button("Login") {                textSize = 26f            }.lparams(width = wrapContent) {                horizontalMargin = dip(5)                topMargin = dip(10)            }        }    }}

属性含义:
• horizontalMargin 同时设置 left 和 right margins,
• verticalMargin 同时设置 top 和 bottom
• margin 同时设置4个方向的 margins.
还有就是我们还可以使用relativeLayout,和我们在xml使用的一样有些命令不能使用或者效果不同与linearLayout

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        val ID_OK = 1        relativeLayout {            button("Ok") {                id = ID_OK            }.lparams { alignParentTop() }            button("Cancel").lparams { below(ID_OK) }        }    }}

3 。 给控件设置Listener

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        relativeLayout {            button("Login") {                onClick {                    toast("Hello!")                }            }        }    }}

感觉这代码和java代码没啥大的区别
再举个例子

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        relativeLayout {            seekBar {                onSeekBarChangeListener {                    onProgressChanged { seekBar, progress, fromUser ->                        toast("Hello!")                    }                }            }        }    }}

这样一来就基本上可以说Listener使用Anko能够完全实现

4 。 include的使用

import android.graphics.Colorimport android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.view.Viewimport org.jetbrains.anko.*class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        relativeLayout {            include<View>(R.layout.activity_main) {                backgroundColor = Color.RED            }.lparams(width = matchParent) { margin = dip(12) }        }    }}

5 。Styles,能够对ViewGroup里的View赋予一样的属性

import android.os.Bundleimport android.support.v7.app.AppCompatActivityimport android.widget.EditTextimport org.jetbrains.anko.editTextimport org.jetbrains.anko.styleimport org.jetbrains.anko.verticalLayoutclass MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        verticalLayout {            editText {                hint = "Name"            }            editText {                hint = "Password"            }        }.style { view -> when(view) {            is EditText -> view.textSize = 20f        }}    }}

Anko就到此为止了,想要完全掌握还需去做点东西啊
再见