Skip to content

Latest commit

 

History

History
258 lines (207 loc) · 7.22 KB

Announcing Anko for Android.md

File metadata and controls

258 lines (207 loc) · 7.22 KB
title date author tags keywords categories reward reward_title reward_wechat reward_alipay source_url translator translator_url
[译]Announcing Anko for Android
2015-04-08 09:20:00 -0700
Hadi Hariri
官方动态
false
Have a nice Kotlin!

我们很高兴地宣布,我们一直致力于 Android 开发的图书馆,其中除了别的以外,还可以使用 DSL 以类型安全和动态的方式创建应用程序界面。

样品味道

这是一个简单的例子,描述安科的一些可能性。想象一下,我们需要创建一个简单的注册表单,包括用户名和<注册> 按钮EditText。使用安科的代码是:

{% raw %}

{% endraw %}
import kotlinx.android.anko.*
 
class MainActivity : Activity() {
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
        verticalLayout {
            padding = dip(16)
            textView("Username:") {
                textSize = 18f
            }.layoutParams { verticalMargin = dip(4) }
 
            val login = editText()
 
            button("Sign up") {
                textSize = 20f
                onClick { login(login.text) }
            }.layoutParams { topMargin = dip(8) }
        }
    }
}

{% raw %}

{% endraw %}

{% raw %}

{% endraw %}

安科广泛使用 Kotlin 扩展功能和属性 安排进去 类型安全的建设者 来描述用户界面。作为回报,我们在编译时得到简洁和类型安全。 当然,我们还可以在设计时使用 Anko Preview 插件来查看预览,这些插件适用于 IntelliJ IDEA 和 Android Studio:

{% raw %}

Anko Designer

{% endraw %}

如果我们现在想添加另一个文本输入小部件,例如电子邮件,我们可能会创建另一对textView()editText()函数调用。然而,更好的方法是将相应的 DSL 片段提取为新的功能:

{% raw %}

{% endraw %}
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
 
    verticalLayout {
        padding = dip(16)
        val login = inputField("Username")
        val email = inputField("E-mail")
 
        button("Sign up") {
            textSize = 20f
            onClick { login(login.text) }
        }.layoutParams { topMargin = dip(8) }
    }
}
 
fun _LinearLayout.inputField(name: String): TextView {
    textView("$name:") {
        textSize = 18f
    }.layoutParams { verticalMargin = dip(4) }
    return editText()
}

{% raw %}

{% endraw %}

任何额外的输入只需要单个函数调用。 表格的最终结果是:

{% raw %}

Anko result form

{% endraw %}

部分定义的听众

当您使用 Android 侦听器的方法很多时,安科非常有用。考虑下面写的不使用安科的代码:

{% raw %}

{% endraw %}
seekBar.setOnSeekBarChangeListener(object: OnSeekBarChangeListener {
  override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
    // Something
  }
  override fun onStartTrackingTouch(seekBar: SeekBar?) {
    // Just an empty method
  }
  override fun onStopTrackingTouch(seekBar: SeekBar) {
    // Another empty method
  }
})

{% raw %}

{% endraw %}

这是使用安科的版本:

{% raw %}

{% endraw %}
seekBar {
  onProgressChanged { (seekBar, progress, fromUser) ->
    // Something
  }
}

{% raw %}

{% endraw %}

具有空体的方法不再需要空的实现。另外,如果为相同的 View 设置onProgressChanged()和 onStartTrackingTouch()`,这两个“部分定义”的监听器将被合并。

不止一个 DSL

安科不仅仅是一个 DSL,而是一个促进 Android 开发在不同领域的图书馆。它有许多方法涵盖对话框,异步任务,服务,意图甚至 SQLite 数据库访问。 例如,如果要启动新的活动

{% raw %}

{% endraw %}
// Without Anko
val intent = Intent(this, javaClass<MyActivity>())
intent.putExtra("id", 5)
startActivity(intent)
 
// With Anko
startActivity<MyActivity>("id" to 5)

{% raw %}

{% endraw %}

或激活振动器:

{% raw %}

{% endraw %}
// Without Anko
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
vibrator.vibrate(500)
 
// With Anko
vibrator.vibrate(500)

{% raw %}

{% endraw %}

或者甚至发送吐司信息:

{% raw %}

{% endraw %}
// Without Anko
Toast.makeText(this, "Download is complete!", Toast.LENGTH_SHORT).show()
 
// With Anko
toast("Download is complete!")

{% raw %}

{% endraw %}

现有代码支持

你可以用 Java 编写你的旧类。此外,如果您仍然希望(或有)编写 Kotlin 活动类并由于某种原因夸大 XML 布局,则可以使用View属性和监听器助手,这将使事情变得更容易:

{% raw %}

{% endraw %}
name.hint = "Enter your name"
name.onClick { /* do something */ }

{% raw %}

{% endraw %}

安科的好处

希望你能看到安科提供了一系列的好处,特别是:

  • 一切都在一个地方。而不是将布局分解成静态(XML)和动态部分,然后尝试将它们绑定在一起,我们可以使用 Kotlin 编写我们想要的所有内容。编译时类型检查是一个甜蜜的奖励。
  • 安科可以使我们的代码更简洁易读。
  • 它允许轻松重复使用。我们可以将 DSL 的一部分提取成功能并多次使用。

试一试!

安科还处于阿尔法阶段,但是我们希望尽快发布您的反馈意见,所以请试试。我们尽可能简单地做到这一点。它全部发布在 Maven Central 上,如果您使用 Gradle,您可以轻松地将所需的依赖项添加到build.gradle文件中:

{% raw %}

{% endraw %}
dependencies {
  compile 'org.jetbrains.anko:anko:0.5-15'
}

{% raw %}

{% endraw %}

Anko Preview 插件可用于 IntelliJ IDEA 和 Android Studio。您可以 下载 它直接从插件存储库。 有二进制文件针对的是原始 Android(SDK 版本 15,Ice Cream Sandwich)和 Android,支持 v4 软件包。 此外,最后但并非最不重要的是,与 Kotlin 相关的所有内容,Anko 都是完全开源的。存储库已打开 GitHub 和往常一样,欢迎贡献!