Anko Layout DSL:如何使用已有的布局?
Anko Layout DSL: How to use already existing layout?
我的问题专门与 constrainLayout { ... }
有关,但由于 Anko Layout 并不关心它适用于每个 Layout
。
我能做到:
// Could also be verticalLayout { ... } or any other Layout
constraintLayout {
// some layout logic e.g.
view {
// ...
}.lparams {
// ...
}
}
现在我遇到了一个问题,因为 this DSL 创建了一个新的 ConstraintLayout
,但我想对现有的 ConstraintLayout
执行相同的逻辑。我正在搜索类似“dsl
”函数的内容,但我在文档或其他任何地方都找不到任何内容。
ConstraintLayout(this).dsl {
// ...
}
有applyRecursively { ... }
函数,被标记为AnkoViewDslMarker
的类使用,即在布局DSL中,但不标记"my already existing ConstraintLayout
"和因此我无法使用任何 DSL 功能。
所以也许一个简单的解决方案是用 annotation class
标记我的对象,但我怀疑这是否有效,因为我同时使用 XML,其中 "my already existing ConstraintLayout
" 也来自。我希望有人知道如何用 Anko 做到这一点。否则我将不得不提出一个问题 :)
这很可能是您需要的 ankoView(...) { ... }
函数,它允许您使用作为第一个参数传递的函数提供的任意视图,其方式与 Anko 原生支持的视图相同。
在此处查看其说明:Is it extensible?
鉴于您已有 constraintLayout
,您可以这样做:
ankoView({ constraintLayout }) {
// Inner DSL scope for constraintLayout
}
我通过创建一个扩展函数解决了 ConstraintLayout
"lparams",然后我可以使用 就像 DSL:
inline fun View.constraintLparams(width: Int, height: Int, init: LayoutParams.() -> Unit) {
val layoutParams = LayoutParams(width, height)
layoutParams.init()
this.layoutParams = layoutParams
}
我的问题专门与 constrainLayout { ... }
有关,但由于 Anko Layout 并不关心它适用于每个 Layout
。
我能做到:
// Could also be verticalLayout { ... } or any other Layout
constraintLayout {
// some layout logic e.g.
view {
// ...
}.lparams {
// ...
}
}
现在我遇到了一个问题,因为 this DSL 创建了一个新的 ConstraintLayout
,但我想对现有的 ConstraintLayout
执行相同的逻辑。我正在搜索类似“dsl
”函数的内容,但我在文档或其他任何地方都找不到任何内容。
ConstraintLayout(this).dsl {
// ...
}
有applyRecursively { ... }
函数,被标记为AnkoViewDslMarker
的类使用,即在布局DSL中,但不标记"my already existing ConstraintLayout
"和因此我无法使用任何 DSL 功能。
所以也许一个简单的解决方案是用 annotation class
标记我的对象,但我怀疑这是否有效,因为我同时使用 XML,其中 "my already existing ConstraintLayout
" 也来自。我希望有人知道如何用 Anko 做到这一点。否则我将不得不提出一个问题 :)
这很可能是您需要的 ankoView(...) { ... }
函数,它允许您使用作为第一个参数传递的函数提供的任意视图,其方式与 Anko 原生支持的视图相同。
在此处查看其说明:Is it extensible?
鉴于您已有 constraintLayout
,您可以这样做:
ankoView({ constraintLayout }) {
// Inner DSL scope for constraintLayout
}
我通过创建一个扩展函数解决了 ConstraintLayout
"lparams",然后我可以使用 就像 DSL:
inline fun View.constraintLparams(width: Int, height: Int, init: LayoutParams.() -> Unit) {
val layoutParams = LayoutParams(width, height)
layoutParams.init()
this.layoutParams = layoutParams
}