我正在为标签编辑创建自定义控件。我正在使用Visual Studio 2019
和Xamarin Forms
。它适用于UWP
和iOS
,但是在Android
中,本机渲染器出错。
System.NotSupportedException:无法从本机句柄0x7feca76624(key_handle 0x95e8e41)激活Xamarin.Forms.Platform.Android.EntryRenderer类型的实例。
输出为:
04-24 10:10:11.382 W / InputMethodManager(17644):startInputReason = 4 04-24 10:10:11.415 I / HwSecImmHelper(17644): mSecurityInputMethodService为空04-24 10:10:11.446 W / ResourceType(17644):获取名称时没有包标识符 资源编号0x00000000 04-24 10:10:11.448 W / View(17644): dispatchProvideAutofillStructure():未布置,忽略04-24 10:10:11.453 I / AssistStructure(17644):扁平化的最终辅助数据: 2444字节,包含1个窗口,10个视图04-24 10:10:12.379 I / zygote64(17644):执行部分代码缓存收集,代码= 61KB, 数据= 54KB 04-24 10:10:12.379 I / zygote64(17644):代码缓存后 收集,代码= 61KB,数据= 54KB 04-24 10:10:12.379 I / zygote64(17644): 将代码缓存容量增加到256KB 04-24 10:10:14.160 W / zygote64(17644):JNI RegisterNativeMethods:尝试注册0 md58432a647068b097f9637064b8985a5e0.FrameRenderer的本机方法 04-24 10:10:14.220 W / InputMethodManager(17644):startInputReason = 4 04-24 10:10:14.259 W / InputMethodManager(17644):startInputReason = 4 04-24 10:10:14.260 I / zygote64(17644):编译器将5MB分配给 编译void android.view.View。((android.content.Context, android.util.AttributeSet,int,int)04-24 10:10:14.263 W / InputMethodManager(17644):startInputReason = 3 04-24 10:10:14.284 I / HwSecImmHelper(17644):mSecurityInputMethodService为空04-24 10:10:14.379 I / zygote64(17644):执行完整的代码缓存收集, 代码= 108KB,数据= 98KB 04-24 10:10:14.380 I / zygote64(17644):在代码之后 缓存集合,代码= 101KB,数据= 74KB 04-24 10:10:14.568 D / Mono
(17644):正在加载Mono.Android.dll asmctx DEFAULT的参考6, 寻找System.Runtime.Serialization,版本= 2.0.5.0, 文化=中性,PublicKeyToken = 7cec85d7bea7798e 04-24 10:10:14.570 D /单声道(17644):图像添加参考 System.Runtime.Serialization [0x7e53d21780](默认为asmctx)-> System.Runtime.Serialization.dll [0x7e51894800]:2mono_pe_file_map: 打开文件System.Runtime.Serialization.dll(3)时出错:没有这样的文件 或目录04-24 10:10:14.570 D / Mono(17644):准备设置组件 'System.Runtime.Serialization'(System.Runtime.Serialization.dll) 04-24 24:10:14.570 D / Mono(17644):组装 System.Runtime.Serialization [0x7e53d21780]已添加到域RootDomain, ref_count = 1 04-24 10:10:14.572 D / Mono(17644):AOT:图片 找不到“ System.Runtime.Serialization.dll.so”:dlopen失败: 找不到库“ System.Runtime.Serialization.dll.so” 04-24 10:10:14.572 D /单声道(17644):AOT:图片 '/ Users / builder / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / external / mono / sdks / out / android-arm64-v8a-release / lib / mono / aot-cache / arm64 / System。找不到Runtime.Serialization.dll.so:dlopen失败:库 “ / Users / builder / jenkins / workspace / xamarin-android-d16-0 / xamarin-android / external / mono / sdks / out / android-arm64-v8a-release / lib / mono / aot-cache / arm64 / System。找不到“ Runtime.Serialization.dll.so” 04-24 10:10:14.572 D / Mono(17644):配置尝试 解析:“ System.Runtime.Serialization.dll.config”。 04-24 10:10:14.572 D / Mono(17644):配置尝试解析: '/Users/builder/jenkins/workspace/xamarin-android-d16-0/xamarin-android/external/mono/sdks/out/android-arm64-v8a-release/etc/mono/assemblies/System.Runtime.Serialization/ System.Runtime.Serialization.config”。 04-24 10:10:14.572 D / Mono(17644):程序集引用addref Mono.Android [0x7e56659a80]-> System.Runtime.Serialization [0x7e53d21780]:2 04-24 10:10:14.573 D / Mono(17644):正在加载参考0,共0 System.Runtime.Serialization.dll asmctx DEFAULT,寻找mscorlib, 版本= 2.0.5.0,文化=中性,PublicKeyToken = 7cec85d7bea7798e 04-24 10:10:14.573 D / Mono(17644):程序集参考addref System.Runtime.Serialization [0x7e53d21780]-> mscorlib [0x7e77dc3c80]: 40加载的程序集:System.Runtime.Serialization.dll [外部] 未处理的异常:
System.NotSupportedException:无法激活类型的实例 来自本机句柄的Xamarin.Forms.Platform.Android.EntryRenderer 0x7feca76624(key_handle 0x95e8e41)。
该组件在Entry
中为运行时添加了新的Layout<View>
。
这也是我在Android中所期望的。
我组件的完整源代码在Github上。重要的部分在这里:
public class TagEntryView : Layout<View>, IDisposable
{
TagEntry TagEntry;
public TagEntryView()
{
PropertyChanged += TagEntryViewPropertyChanged;
PropertyChanging += TagEntryViewPropertyChanging;
TagEntry = new TagEntry();
TagEntry.TextChanged += TagEntryTextChanged;
Children.Add(TagEntry);
}
void TagEntryTextChanged(object sender, TextChangedEventArgs e)
{
if (TagSeparators != null)
{
if (TagSeparators.Any(e.NewTextValue.Contains))
{
string tag = e.NewTextValue;
foreach (var item in TagSeparators)
{
tag = tag.Replace(item, string.Empty);
}
if (TagValidatorFactory != null)
{
var tagBindingContext = TagValidatorFactory(tag);
var tagEntry = sender as Entry;
if (tagBindingContext != null)
{
TagItems.Add(tagBindingContext);
tagEntry.Text = string.Empty;
}
else
{
tagEntry.Text = tag;
}
tagEntry.Focus();
}
}
}
}
}
有关更多详细信息,我创建了两个视频,同时显示了它们在Visual Studio和Android设备上的显示情况。
这是我在Android device上所做的事情。在Visual Studio中调试。