在我的xamarin.forms项目中,我得到了一张图片。 此图像有一个渲染器,看起来像这样:
public class CustomImage : Image
{
public event EventHandler<PointEventArgs> TapEvent;
public void OnTapEvent(int x, int y)
{
TapEvent?.Invoke(this, new PointEventArgs(x, y));
}
}
Android渲染器看起来像这样:
public class ImageRendererAndroid : ImageRenderer
{
private ImageView nativeElement;
private CustomImage formsElement;
protected override void OnElementChanged(ElementChangedEventArgs<Image> e)
{
base.OnElementChanged(e);
if (e.NewElement != null)
{
if (Control != null)
{
Control.Clickable = true;
Control.SetOnTouchListener(ImageTouchListener.Instance.Value);
Control.SetTag(Control.Id, new JavaObjectWrapper<CustomImage> { Obj = Element as CustomImage });
}
}
}
}
当我调用方法Control.setTag时,我收到以下错误:
Java.Lang.IllegalArgumentException: The key must be an application-specific resource id.
Control.Id是157
那么为什么我会收到此错误以及如何解决?
由于
答案 0 :(得分:1)
根据word2vec implementation,您无法将任意值设置为键,但应定义应用程序资源ID
指定的键应该是在应用程序的资源中声明的id,以确保它是唯一的(请参阅ID资源类型)。标识为属于Android框架或未与任何程序包关联的密钥将导致抛出IllegalArgumentException。
密钥与您的控件无关,但是指的是控件中的标记
<强>参数强>
key :标识标记的密钥
标记:使用
标记视图的对象
因此传递你的控件ID似乎不是一个非常好的选择。
请参阅SetTag documentation了解如何创建资源。
XML中定义的唯一资源ID。 [...]
res/values/filename.xml
。文件名是任意的。
在此文件中,您可以创建ID
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="id_name" />
</resources>
属性type="id"
对于ID资源是必需的。 id_name
可以更改为您喜欢的任何内容,然后在您的应用程序中引用
Resource.Id.id_name
(Resource
类应该在你的Android应用程序的主命名空间中。)