在Xamarin表单中设置Elements的资源名称

时间:2018-12-03 02:02:21

标签: 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

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

1 个答案:

答案 0 :(得分:2)

这些Android小部件/控件是动态创建的(在这种情况下是通过Forms的XAML创建的),而不是通过夸大AXML布局创建的,因此没有要解析的布局,也没有分配资源名称(没有分配R. *常量)。 / p>

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

如果您的Forms应用需要演示/测试凭据,并且您要使用Play商店的预报告,则必须使用自动测试搜寻器进行传递,并提供自定义的Robo脚本来运行测试

注意:

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