在 Xamarin Forms 中设置元素的资源名称

Jes*_*ham 5 android xamarin.android xamarin xamarin.forms

我希望能够引用在将 Xamarin Forms 应用程序编译到 Android 后创建的元素。


示例代码

<Entry Placeholder="Username" 
       Text="{Binding UserName, Mode=TwoWay}"
       x:Name="UsernameEntry"
       x:Key="UsernameEntry" />

<Entry Placeholder="Password"
       IsPassword="True" 
       Text="{Binding Password, Mode=TwoWay}" 
       x:Name="PasswordEntry" 
       x:Key="PasswordEntry" />

<Button Text="{extensions:Translate LogIn}" 
        Command="{Binding LoginUserCommand}"
        x:Name="LoginButton" 
        x:Key="LoginButton" />
Run Code Online (Sandbox Code Playgroud)

从我可以看到以 Elements 的方式生成的内容是这样的:

android:id?/content?/RelativeLayout[0]?/PlatformRenderer[0]?/NavigationPageRenderer[0]?/PageContainer[0]?/PageRenderer[0]?/Platform_DefaultRenderer[0]?/Platform_DefaultRenderer[1]?/EntryRenderer[0]?/FormsEditText[0]
android:id?/content?/RelativeLayout[0]?/PlatformRenderer[0]?/NavigationPageRenderer[0]?/PageContainer[0]?/PageRenderer[0]?/Platform_DefaultRenderer[0]?/Platform_DefaultRenderer[1]?/EntryRenderer[1]?/FormsEditText[0]
android:id?/content?/RelativeLayout[0]?/PlatformRenderer[0]?/NavigationPageRenderer[0]?/PageContainer[0]?/PageRenderer[0]?/Platform_DefaultRenderer[0]?/Platform_DefaultRenderer[1]?/ButtonRenderer[2]?/AppCompatButton[0]
Run Code Online (Sandbox Code Playgroud)

这是不可用的,我只想能够这样命名资源:

UsernameEntry
PasswordEntry
LoginButton
Run Code Online (Sandbox Code Playgroud)

然后引用它们。


用例:

  • Firebase 测试:

在此处输入图片说明

  • Play 商店预发布报告:

在此处输入图片说明

我觉得这应该很容易做到,但我花了一天的大部分时间寻找并没有发现任何帮助将不胜感激。

Sus*_*ver 3

这些 Android 小部件/控件是动态创建的(在本例中是通过 Forms 的 XAML),而不是来自膨胀的 AXML 布局,因此没有要解析的布局,也没有分配资源名称(没有分配 R.* 常量)。

预启动登录凭据需要资源名称而不是 ID。仅供参考:小部件 ID 可以在运行时分配(即通过该控件的自定义表单渲染器),但在这种情况下这没有帮助,因为您需要基于字符串的资源名称。

如果您的 Forms 应用程序需要演示/测试凭据,并且您需要使用 Play 商店预报告,则您必须继续使用自动测试爬虫并提供要运行的自定义 Robo 脚本以进行测试。

笔记:

您可以在 Xamarin.Android 项目中使用一些虚构的资源名称创建一个虚拟布局,因此在构建时这些名称会在自动生成的 C# Resource.Id 和 Java R.ID 文件中分配 int ID,然后在运行时(在本机代码中,通过 DI/IoC/Forms 的渲染器/...)获取该基于 Forms 的登录页面的 Android Widget,并使用从虚拟创建的 ID 分配这些用户名/密码 Widget 的 ID 属性布局的资源字符串名称。