我知道我可以使用id
使用 Anko 属性来标识视图:
class MainActivityUI : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
frameLayout {
textView {
id = R.id.text
}
}
}
}
然后在里面获取Activity
使用find()
函数(或使用 Kotlin Android 扩展):
class MainActivity : AppCompatActivity() {
private val textView by lazy {
find<TextView>(R.id.text)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MainActivityUI().setContentView(this)
textView.text = "Hello World"
}
}
但我觉得我失去了一些东西;唯一的地方README https://github.com/Kotlin/anko/blob/master/README.md提到了find
函数或 Kotlin Android 扩展位于标题为支持现有代码:
您不必使用 Anko 重写所有 UI。你可以保留你的旧
用 Java 编写的类。此外,如果您仍然想要(或必须)
编写一个 Kotlin 活动类并为某些活动扩充 XML 布局
原因,您可以使用 View 属性,这会让事情变得更容易:
// Same as findViewById(), simpler to use
val name = find<TextView>(R.id.name)
name.hint = "Enter your name"
name.onClick { /*do something*/ }
您可以使用 Kotlin Android 使代码更加紧凑
扩展。
这使得它看起来像find
函数仅用于支持“旧”XML 代码。
所以我的问题是这样的;正在使用一个id
随着find
功能访问的正确方法View
来自Activity
使用安科?有没有更“Anko”的方式来处理这个问题?或者我是否错过了 Anko 的其他一些好处,使得访问View
来自Activity
无关紧要?
还有第二个相关问题;如果这is正确的访问方式View
来自Activity
,有没有办法创建一个id
资源(即"@+id/"
)从一个AnkoComponent
?而不是创建每个id
in the ids.xml
file.