android - 在 android.widget.ImageView 上找不到参数类型为 int 的属性 'android:layout_width' 的 setter

标签 android android-databinding

app/build.gradle :

dataBinding {
        enabled = true
}
kapt "com.android.databinding:compiler:3.0.1"

在布局中,我有两个图像。

我想设置宽度 仅限 对于第一张图片。

这是 XML 布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="com.myproject.android.customer.util.GuiUtil" />
    </data>
            <ImageView
            android:id="@+id/imageViewPhoto"
            android:layout_width="@{GuiUtil.getTileWidthDpInScreen(context), default=@dimen/preview_image_height}"
            android:layout_height="@dimen/preview_image_height"/>

            <ImageView
            android:id="@+id/imageViewFavorite"
            android:layout_width="28dp"
            android:layout_height="28dp"/>    

</layout>

这是适配器的代码:
    @BindingAdapter("layout_width")
    public static void setLayoutWidth(View view, int width) {
        ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
        layoutParams.width = width;
        view.setLayoutParams(layoutParams);
}

这是方法GuiUtil.getTileWidthDpInScreen :
public class GuiUtil {    
    public static int getTileWidthDpInScreen(Context context) {
        // some logic that return int value
   }

但我得到这个错误:
:app:transformDataBindingWithDataBindingMergeArtifactsForDebug UP-TO-DATE
:app:kaptDebugKotlin
e: java.lang.IllegalStateException: failed to analyze: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:layout_width' with parameter type int on android.widget.ImageView.
file:myproject\app\src\main\res\layout\preview_offer_item.xml
loc:26:36 - 26:74
****\ data binding error ****    
    at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57)

最佳答案

不幸的是,默认情况下,此语法不支持 Android 数据绑定(bind)。您可以改用@BindingAdapter,下面是完整代码(Kotlin):

    @BindingAdapter("layoutWidth")
fun setLayoutWidth(layout: ViewGroup, dimen: Float) {
    val layoutParams = layout.layoutParams
    layoutParams.width = dimen.toInt()
    layout.layoutParams = layoutParams
}

在您的 XML 布局文件中使用“app:layoutWidth”,您甚至可以使用其他语法,例如:
android:layout_width="match_parent"   //required
android:layout_height="@dimen/dp_102"   //required
app:layoutWidth="@{variable.predict ? @dimen/dp_86 : @dimen/dp_102}"            

关于android - 在 android.widget.ImageView 上找不到参数类型为 int 的属性 'android:layout_width' 的 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47589569/

相关文章:

android - Android 中的静态数据绑定(bind) [文字]

android - BottomNavigationView 在 View 模型中的数据绑定(bind)

android - DataBindingUtil 将布局膨胀为空

android - <size> 属性在使用 layer-list 时没有用?

android - Android Kotlin Pusher Chatkit-错误-需要 session 室成员

android - 如何检查 firebase 中的路径是否存在(检查 child 是否存在) flutter

java - 如何在 ListView 中保存每个项目的评分?

android - 数据绑定(bind)必须包含布局文件

android - 引入数据绑定(bind)后无法运行仪器测试

java - 为什么我的包裹对象返回为空?安卓开发