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

标签 android xamarin xamarin.forms xamarin.android

我希望能够引用将 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" />

据我所知,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]

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

UsernameEntry
PasswordEntry
LoginButton

然后引用它们。


用例:

  • Firebase 测试:

enter image description here

  • Play 商店发布前报告:

enter image description here

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

最佳答案

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

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

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

注意:

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

关于android - 在 Xamarin Forms 中设置元素的资源名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53586510/

相关文章:

android - 自定义 session 另一个类

c# - Xamarin/C#/SQlite - 为什么我的 SUM 查询返回 'System.Threading.Task' ?

xamarin - 1 属性未更新 Xamarin 表单绑定(bind)

xamarin - 如何在Xamarin Carousel中将所有项目模板数据设置到单个 View 中

video - 如何在 Xamarin Forms 中获取视频的长度

java - 将整数日期/时间转换为 Java 中的 unix 时间戳?

android - 在真实设备上测试 Android 应用程序

java - 极其奇怪的类(class)困惑

Visual Studio 2015 中未检测到 Android 手机

c# - 将 C# 模板添加到 XAML 代码。我该如何进行绑定(bind)?