我希望能够引用将 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 测试:
- Play 商店发布前报告:
我觉得这应该很容易做到,但我花了一天的大部分时间寻找但没有发现任何帮助,我们将不胜感激。
最佳答案
这些 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/