Xamarin.Android 设计器反白不可用和没有 Intellisense 的解决方案

这篇文章主要介绍使用 Visual Studio 的 Android 设计器时,遇到的设计器不能使用按钮反白,以及使用 xml 源码编写 UI 界面时没有 Intellisense 的情况。关键词:C# Android Xamarin Bug 不可用 设计器 xml intellisense

在使用 Xamarin 的时候,你需要了解各个平台的特性。换句话说,Xamarin 能有效减少代码量和解决 UI 重复设计与一致性的问题,但对它们的了解仍然是必需的。

这次我在设计剧本向导的项目时遇到了很让我觉得难受的事情。Xamarin.Forms 要使用 Xamarin Previewer 来可视化预览 UI 效果,而且不方便不说,有时还会有各种奇怪的问题。iOS 的设计器需要 Mac 连接,我可以理解,然而本应该一下子就能使用的 Android 设计器竟然按钮反白不能使用,axml 源码也没有 Intellisense 智能提示。

设计器不可用,控件窗口没有可用控件

先说设计器反白不能用,控件栏显示没有可用控件的问题。和 WPF 不同,Android 的 Layout 需要在 /Resources/layout 里创建,如同其它资源比如图片也需要在 Resources 文件夹里的各个分辨率文件夹里放置不同分辨率的版本,在 layout 文件夹里创建或者移动已有的 .axml 文件到里面即可。

C# Android Xamarin Bug 不可用 设计器 xml intellisense
预置布局文件正常使用设计器
C# Android Xamarin Bug 不可用 设计器 xml intellisense
在根目录新建 layout 不可用
C# Android Xamarin Bug 不可用 设计器 xml intellisense
转移到 layout 文件夹可用设计器

也许会有人觉得很这个问题很弱智。然而我使用 Xamarin 是因为我没有足够的时间精力学习多个平台的原生开发,整个团队只有我一个人。

早前我用 Android Studio 开发的时候很自然地在 layout 文件夹里创建 Layout,但是在多平台同时开发的时候,就像同时使用多门外语,一不留神就会把一个平台的思维代入到另一个平台中。因为在 UWP 和 WPF 项目中,素材和 UI 文件可以随便乱放。

此外 Xamarin 论坛有人提出类似的问题,他们的确是在 layout 里创建文件,却依然存在反白的问题,并且没有最终的解决方案,可能需要重新安装 Xamarin。

没有 Intellisense 代码智能补全提示

这是出现在 Visual Studio 上的问题,Xamarin Studio 上似乎还没有出现过。

值得一提的是,我在第一次新建 layout 的时候,Visual Studio 提示是否需要信任模板(Trust the template,我是用的是英文版,所以不清楚中文提示)。如果这时候选择不信任,则打开 .axml 文件甚至连设计器或者说设计视图都没有,只能看 xml 源码。

信任之后创建完毕,并且已经改为在 layout 文件夹新建,可以使用设计器和拖放控件,源码编辑时却发现没有 Intellisense 提示。

C# Android Xamarin Bug 不可用 设计器 xml intellisense
Android 没有 Intellisense
C# Android Xamarin Bug 不可用 设计器 xml intellisense
Android 的 Intellisense

这似乎是 Android 布局相关的 XML Schemas 没有正确加载造成的,Google 上有不少类似的问题。

解决方法是手动添加所需的 Schemas。随意打开一个 .axml 文件,在 Visual Studio 顶部的菜单栏上会出现一个名为 XML 的菜单,单击最后一项 Schemas,添加压缩包(单击下载 密码nd7p)内的两个 XML 架构文件(.xsd)。可能并不会立刻生效,我是在移除了新添加的两项之后再重新添加,之后就可以使用 Intellisense 了。

Xamarin 论坛上提到不能使用设计视图直接打开 .axml ,必须用 Visual Stuido 的纯 XML 编辑器打开,但我在测试的时候并不需要这么做。

参考链接

Xamarin Forum – How to enable Android designer in Visual Studio?

Xamarin Forum – How to enable intellisense or auto completion for AXML?

发表评论

电子邮件地址不会被公开。 必填项已用*标注