Bry*_*yan 6 android kotlin anko
我知道我可以使用id
Anko 的属性来识别视图:
class MainActivityUI : AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
frameLayout {
textView {
id = R.id.text
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Activity
使用find()
函数(或使用Kotlin Android Extensions)中获取它:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
但我觉得我错过了一些东西; README提到find
功能的唯一地方或Kotlin Android Extensions位于标题为Supporting Existing Code的部分:
您不必使用Anko重写所有UI.您可以使用Java编写旧类.此外,如果您仍然希望(或有)编写Kotlin活动类并因某种原因而膨胀XML布局,则可以使用View属性,这将使事情变得更容易:
Run Code Online (Sandbox Code Playgroud)// Same as findViewById(), simpler to use val name = find<TextView>(R.id.name) name.hint = "Enter your name" name.onClick { /*do something*/ }
您可以使用Kotlin Android Extensions使您的代码更加紧凑.
这使得它似乎find
只是用于支持"旧的"XML代码.
所以我的问题是这个; 是使用id
随着find
功能访问的正确方法View
从Activity
使用安口?是否有更"Anko"的处理方式?或者我错过了Anko的其他一些好处,使得View
从Activity
无关紧要的访问?
还有第二个相关问题; 如果这是View
从中访问a的正确方法Activity
,有没有办法从内部创建id
资源(即"@+id/"
)AnkoComponent
?而不是id
在ids.xml
文件中创建每个.
那么,为什么还要XML id
用来定位View呢?因为我们已经使用Anko而不是XML.
在我看来,我们可以将视图元素存储在AnkoComponent
而不是使用find view
id方法.检查代码打击:
class MainActivityUI : AnkoComponent<MainActivity> {
lateinit var txtView: TextView
override fun createView(ui: AnkoContext<MainActivity>) = with(ui) {
frameLayout {
txtView = textView {
id = R.id.text // the id here is useless, we can delete this line.
}
}
}
}
class MainActivity : AppCompatActivity() {
lateinit var mainUI : MainActivityUI
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainUI = MainActivityUI()
mainUI.setContentView(this)
mainUI.txtView.text = "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3337 次 |
最近记录: |