jch*_*tof 4 binding android kotlin
我已经用谷歌搜索并尝试了示例,但我无法执行绑定 FrameLayout 宽度和高度。其他绑定工作正常。
最终解决方案: 示例项目:https : //github.com/jchristof/SimpleDatabindingExample
面板.xml:
<layout>
<data class="PanelControlBinding">
<variable
name="panel"
type="com.example.viewmodels.ContainerViewModel"/>
</data>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@{panel.width}"
android:layout_height="@{panel.height}"
android:translationX="@{panel.left}"
android:translationY="@{panel.top}"
android:background="@{panel.background}"
>
</FrameLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
binding.kt kotlin 文件
@BindingAdapter("android:layout_width")
fun setLayoutWidth(view: View, width: Int) {
val layoutParams = view.layoutParams
layoutParams.width = width
view.layoutParams = layoutParams
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多关于宽度类型的排列(将其设置为 Float)以及删除 android: 命名空间,将 setLayoutWidth 声明为静态伴随对象等。
我继续收到错误:
Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:layout_width' with parameter type java.lang.Integer on android.widget.FrameLayout.
file:D:\Projects\strandXmlAppRunner\app\src\main\res\layout\panel.xml
loc:9:32 - 9:42
****\ data binding error ****
Run Code Online (Sandbox Code Playgroud)
我需要如何更改这些声明以启用对布局宽度和高度的绑定?
编辑
还尝试向绑定适配器添加导入:
<data class="PanelControlBinding">
<import type="com.example.services.BindingKt"/>
<variable
name="panel"
type="com.example.viewmodels.ContainerViewModel"/>
</data>
Run Code Online (Sandbox Code Playgroud)
同样的错误
编辑
回到我的 ContainerViewModel,我注意到如果我从 Int 更改宽度的返回类型?到内部:
open class ContainerViewModel(val attributes: IValuesStore<String>) {
val width:Int
get() = placementArea?.width?.toInt() ?: 0
}
Run Code Online (Sandbox Code Playgroud)
略有不同的错误:
Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:layout_width' with parameter type int on android.widget.FrameLayout.
file:D:\Projects\strandXmlAppRunner\app\src\main\res\layout\panel.xml
loc:11:32 - 11:42
****\ data binding error ****
Run Code Online (Sandbox Code Playgroud)
类型 java.lang.Integer 与类型 int
编辑
根据建议,修改为包括默认值:
<FrameLayout
android:layout_width="@{panel.width, default=wrap_content}"
android:layout_height="@{panel.height, default=wrap_content}"
android:translationX="@{panel.left}"
android:translationY="@{panel.top}"
android:background="@{panel.background}"
>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
和
@BindingAdapter("android:layout_width")
fun setLayoutWidth(view: View, width: Float) {
val layoutParams = view.layoutParams
layoutParams.width = width.toInt()
view.layoutParams = layoutParams
}
Run Code Online (Sandbox Code Playgroud)
没有区别:
Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:layout_width' with parameter type int on android.widget.FrameLayout.
file:D:\Projects\strandXmlAppRunner\app\src\main\res\layout\panel.xml
loc:11:32 - 11:42
****\ data binding error ****
Run Code Online (Sandbox Code Playgroud)
要使 DataBinding 为layout_width和工作layout_height,您必须为视图提供默认宽度和高度。所以你可以做的是将 xml 更改为这样的:
<layout>
<data class="PanelControlBinding">
<variable
name="panel"
type="com.example.viewmodels.ContainerViewModel"/>
</data>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="@{panel.width, default=wrap_content}"
android:layout_height="@{panel.height, default=wrap_content}"
android:translationX="@{panel.left}"
android:translationY="@{panel.top}"
android:background="@{panel.background}"
>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
你的 BindingAdapter 像这样:
@BindingAdapter("android:layout_width")
fun setLayoutWidth(view: View, width: float) {
val layoutParams = view.layoutParams
layoutParams.width = width
view.layoutParams = layoutParams
}
Run Code Online (Sandbox Code Playgroud)
尝试一次,它应该可以工作。如果它不起作用,请告诉我。
编辑
为了使您的项目工作,我已将这些内容添加到 build.gradle(Module: app)
1添加apply plugin: 'kotlin-kapt'到顶级插件。
2将此添加到android标签:
kapt {
generateStubs = true
}
Run Code Online (Sandbox Code Playgroud)
在这些更改之后,在运行之前清理并重建项目。
希望它会起作用。:)
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |