如何在Xamarin.Forms中设置android id属性?

rob*_*r01 7 c# android xamarin xamarin.forms

我需要在共享的Xamarin.Forms代码之外访问由Xamarin.Forms创建的视图.

如何在Xamarin.Forms中设置android id属性?

wol*_*ger 4

获取 Android id 的一种方法是通过自定义渲染器。例如,如果相关视图是 Xamarin.Forms.Editor,您可以向应用程序添加自定义渲染器,如下所示:

首先,在您的 Xamarin.Forms 项目中,添加一个派生自您想要从中获取 id 的视图的类:

namespace MyApp
{
    public class CustomEditor : Editor
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,此类不会添加任何新成员,它只是定义一个新类型,我们需要将其与自定义渲染器关联。

然后,在您的 Xamarin Android 项目中,添加自定义渲染器并将其与您的自定义视图类型关联:

using System;
using MyApp;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;


[assembly: ExportRenderer(typeof(CustomEditor), typeof(CustomEditorRenderer))]

namespace MyApp.Android
{
    class CustomEditorRenderer : EditorRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Editor> e)
        {
            base.OnElementChanged(e);

            int androidId = this.Id; // android widget id
            Guid xamarinId = e.NewElement.Id; // xamarin view id

        }
    }
Run Code Online (Sandbox Code Playgroud)

在该自定义渲染器中,您现在可以访问与 Xamarin Forms 视图关联的底层 Android 小部件。这意味着您也可以获取 Android .id 属性。

请注意:

  • 为此,在 Xamarin.Forms UI 中,您需要使用 CustomEditor 而不是常用编辑器类
  • 并非所有 Xamarin Forms 视图都有您可以从中派生的自定义呈现器。有些(例如 ListViewRenderer)是内部类,不支持在代码中继承。在这些情况下,您不能使用此技术。