android颜色透明度怎么设置 android按钮透明效果( 三 )

  
通常我们使用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)}


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。