【问题标题】:Setting resource names of Elements in Xamarin Forms在 Xamarin Forms 中设置元素的资源名称
【发布时间】:2018-12-03 02:02:20
【问题描述】:

我希望能够引用将 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 xamarin xamarin.forms xamarin.android


【解决方案1】:

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

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

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

注意:

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

【讨论】:

猜你喜欢
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多