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)
然后引用它们。
用例:
我觉得这应该很容易做到,但我花了一天的大部分时间寻找并没有发现任何帮助将不胜感激。
这些 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 属性布局的资源字符串名称。
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |