我希望能够引用将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
然后引用它们。
用例:
我觉得这应该很容易做到,但是我花了整整一天的时间,发现没有任何帮助将不胜感激。
答案 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属性从虚拟布局的资源字符串名称中获取。