通常我们使用xml文件写我们的布局,但是他有一些缺点如不是类型安全,不是空安全,解析xml文件消耗更多的CPU和电量等等 。而Anko Layout可以使用DSL(Domain Specific Language)动态创建我们的UI,并且它比我们使用Java动态创建布局方便很多主要是更简洁,它和拥有xml创建布局的层级关系,能让我们更容易阅读 。(官方说的优点)
举个栗子:
verticalLayout {val name = editText()button(\\”Say Hello\\”) {onClick { toast(\\”Hello, ${name.text}!\\”) }}}
上面的代码是不是很简单易懂,当然,默认的控件并不能满足我们的需求,例如我们会更改字体的颜色及大小,会设置宽度和高度,会设置margin,padding值,那么该如何实行呢,当然也很简单,因为它的逻辑和xml书写布局是一个套路 。例如以下实现
val textView=textView(\\”我是一个TextView\\”){textSize = sp(17).toFloat()textColor=0xff000.opaque}.lparams{margin=dip(10)height= dip(40)width= matchParent}
配合上前面Common库是不是很简单呢?
这里我们不需要setContentView 。直接写在onCreate方法中就行 。
在上面创建UI过程中,我们直接把创建UI的代码写在onCreate方法中了,当然,还有一种写法 。我们创建一个内部类实行AnkoComponent接口,并重写createView方法,该方法返回一个View,也就是我们创建的布局 。修改如下
class MyActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {super.onCreate(savedInstanceState, persistentState)MyActivityUI().setContentView(this)}}
class MyActivityUI : AnkoComponent<MyActivity> {override fun createView(ui: AnkoContext<MyActivity>) = with(ui) {verticalLayout {val name = editText()button(\\”Say Hello\\”) {onClick { ctx.toast(\\”Hello, ${name.text}!\\”) }}}}}
现在我们编译运行,发现效果和布局文件写的界面是一样的 。但是它的性能是有优势的,其实吧并没有发觉性能优势 。不管怎样,这种DSL确实便于阅读,也很容易上手,在上面的代码中,你可能注意到了dip(10),它表示将10dp转换为像素的意思,是Anko的扩展函数,说的扩展函数,如果阅读过Anko的源码我们发现里面大量的使用扩展函数,这也是Kotlin语言的优势之一 。
这里就简单介绍下Layout的使用和优点 。但是我想各位看官在实际开发中也不一定会用,因为不可视化用起来实在难以接受 。不过这种见仁见智吧 。
4.Anko SQLite: a query DSL and parser collection for Android SQLite;
Anko SQLite是一个查询解析SQLite的领域专用语言
SQLite 存在的不足:
过多需要实现的模板代码;通过字符串实现 SQL 命令,容易出错,且编译时无法检查;每次需要手动关闭数据库;线程和同步访问的问题;
随着你应用的数据库越来越复杂,暴露出来的问题也会越多 。所以也难怪很多人会选择 ORM 或者 NoSQL,但这带来的方便性是以增加应用大小和方法数为代价的 。
如果你打算使用 Kotlin 来开发 Android 应用,那么现在通过 Anko SQLite 就可以很方便的进行 SQLite 操作了 。比如可以告别麻烦的 Cursor 和 ContentValue、内置安全机制,保证数据库在执行所有代码后能够关闭 。
通过继承 ManagedSQLiteOpenHelper 类来实现数据库帮助类,推荐做法就是按照官方的实现:
class DatabaseHelper(ctx: Context) : ManagedSQLiteOpenHelper(ctx, \\”LibraryDatabase\\”, null, 1) {companion object {private var instance: DatabaseHelper? = null
@Synchronizedfun Instance(context: Context): DatabaseHelper {if (instance == null) {instance = DatabaseHelper(context.applicationContext)}return instance!!}}
override fun onCreate(database: SQLiteDatabase) {createTable(Book.TABLE_NAME, true, Book.COLUMN_ID to INTEGER + PRIMARY_KEY, Book.COLUMN_TITLE to TEXT, Book.COLUMN_AUTHOR to TEXT)}
- 富安娜家纺四件套颜色特点 富安娜家纺床上用品
- 情人节颜色代表什么
- 彩虹的七种颜色是什么 彩虹的七种颜色分别是
- 草莓的花是什么颜色 草莓的花有哪些颜色
- 学士服颜色分类是什么 学士服颜色分类的区别
- 什么颜色可以调成粉红色 哪两种颜色混合变粉红色
- 黄颜色的水果有哪些 有哪些黄颜色的水果
- 金丝楠木颜色 金丝楠木颜色是什么
- 颜色种类 颜色有哪些种类
- 浅蓝色和什么颜色最搭 浅蓝色衣服配什么颜色裤子