但是我们用Anko是这样的:
val countries = listOf(\\”Russia\\”, \\”USA\\”, \\”Japan\\”, \\”Australia\\”)//传listselector(\\”Where are you from?\\”, countries, { dialogInterface, i ->toast(\\”So you\\’re living in ${countries[i]}, right?\\”)})
看起来只是简化了dialog的创建过程 。
2.2.5 Progress dialogs
不显示进度的 Loading Dialg
pressDialog(\\”Please wait a minute.\\”, \\”Downloading…\\”)indeterminateProgressDialog(\\”Fetching the data…\\”)2.3 Logging
打印log辅助工具 。
Android SDK 提供 android.util.Log 类来提供一些 logging 方法,,这些方法都很实用,但是我们每次必须传递一个 Tag 参数,同时这个 Tag 信息必须是 String 类型的,这就略显麻烦 。不过现在我们可以通过 AnkoLogger 类摆脱这些恼人的问题:
class SomeActivity : Activity(), AnkoLogger {fun someMethod() {info(\\”Info message\\”)debug(42) // .toString() method will be called automatically}}
默认的 Tag 名是当前的类名( 本例中的是SomeActivity),但是通过重写 AnkoLogger 的 loggerTag 属性我们是可以来更改的,而且每个方法有两个版本:plain and lazy (inlined)
1.Lazy:
info(\\”String \\” + \\”concatenation\\”)info { \\”String \\” + \\”concatenation\\” }
2.plain:
class SomeActivity : Activity() {private val log = AnkoLogger(this.javaClass)private val logWithASpecificTag = AnkoLogger(\\”my_tag\\”)
private fun someMethod() {log.warning(\\”Big brother is watching you!\\”)}}
上面两种方法分别是不同Tag的实现方式 。
AnkoLogger中loggerTag 属性具体对照如下:2.4 Resources and dimensions
你可以在你的项目中使用Anko Resources and dimensions来简化你的代码,例如Color、Dimen等,颜色透明度直接色值.opaque就可以,尺寸的话直接使用dip(dipValue)、sp(spValue)就可以 。在这里面还有一个就是applyRecursively()用来控制子View的操作,如:
verticalLayout {textView{text = \\”EditText01\\”backgroundColor = 0xff000.opaquetextSize = 14f}textView {text = \\”EditText02\\”backgroundColor = 0x99.gray.opaquetextSize = 23f}}.applyRecursively {//如果是ViewGroup的话可以使用applyRecursively来为每个Child View进行设置view -> when(view){is TextView -> view.textColor = Color.RED}}3.Anko Layouts
通常我们使用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 {override fun createView(ui: AnkoContext) = with(ui) {verticalLayout {val name = editText()button(\\”Say Hello\\”) {onClick { ctx.toast(\\”Hello, ${name.text}!\\”) }}}}}
现在我们编译运行,发现效果和布局文件写的界面是一样的 。但是它的性能是有优势的,其实吧并没有发觉性能优势 。不管怎样,这种DSL确实便于阅读,也很容易上手,在上面的代码中,你可能注意到了dip(10),它表示将10dp转换为像素的意思,是Anko的扩展函数,说的扩展函数,如果阅读过Anko的源码我们发现里面大量的使用扩展函数,这也是Kotlin语言的优势之一 。
这里就简单介绍下Layout的使用和优点 。但是我想各位看官在实际开发中也不一定会用,因为不可视化用起来实在难以接受 。不过这种见仁见智吧 。
- 北极熊的皮肤是,为什么北极熊的毛是透明的,而皮肤是黑色的?
- 海康威视网络硬盘录像机怎么恢复出厂 海康威视网络硬盘录像机恢复出厂按钮在哪
- 做透明胶带的机器有那些
- 透明胶痕迹如何去掉,透明胶的痕迹如何去除
- 车上lo按钮什么意思
- 女郎透明内衣是什么
- 卡宴后视镜加热按钮在哪里
- qq名片怎么弄成透明的啊?
- 大众汽车暖风是哪个按钮
- 车的ac按钮是什么意思