在android.widget.ImageView上找不到参数类型为int的Android:Layout_Width;属性的设置器

Cannot find the setter for attribute #39;android:layout_width#39; with parameter type int on android.widget.ImageView(在android.widget.ImageView上找不到参数类型为int的Android:Layout_Width;属性的设置器)
本文介绍了在android.widget.ImageView上找不到参数类型为int的Android:Layout_Width;属性的设置器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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:myprojectappsrcmain
eslayoutpreview_offer_item.xml
loc:26:36 - 26:74
**** data binding error ****    
    at org.jetbrains.kotlin.analyzer.AnalysisResult.throwIfError(AnalysisResult.kt:57)

推荐答案

遗憾的是,该语法默认不支持Android数据绑定。您可以改用@BindingAdapter,以下是完整代码(Kotlin):

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

在使用"app:layoutWidth"XML布局文件中,您甚至可以将其与其他语法一起使用,例如:

android:layout_width="match_parent"   //required
android:layout_height="@dimen/dp_102"   //required
app:layoutWidth="@{variable.predict ? @dimen/dp_86 : @dimen/dp_102}"            

这篇关于在android.widget.ImageView上找不到参数类型为int的Android:Layout_Width;属性的设置器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Android + Data Binding @style(Android+数据绑定@Style)
Android Databinding DatabindingUtil vs binding class(Android数据库绑定DatabindingUtil与绑定类)
How to change the order of MenuItems in menu of NavigationView in code?(如何在代码中更改导航视图菜单中菜单项的顺序?)
NavigationView: custom item layout with app:actionLayout how to?(NavigationView:使用APP:ActionLayout自定义项目布局如何?)
Recording volume drop switching between RemoteIO and VPIO(录制RemoteIO和VPIO之间的音量下降切换)
The certificate for this server is invalid ( error: 9813 )(此服务器的证书无效(错误:9813))