我需要在共享的Xamarin.Forms代码之外访问由Xamarin.Forms创建的视图。
如何在Xamarin.Forms中设置android id属性?
答案 0 :(得分:3)
获取Android ID的一种方法是通过自定义渲染器。例如,如果有问题的视图是Xamarin.Forms.Editor,您可以按如下方式向应用添加自定义渲染器:
首先,在您的Xamarin.Forms项目中,添加一个类,该类派生自您希望从中获取ID的视图:
namespace MyApp
{
public class CustomEditor : Editor
{
}
}
请注意,此课程不会添加任何新成员,它只是用于定义我们需要将自定义渲染器与之关联的新类型。
然后,在您的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
}
}
在该自定义渲染器中,您现在可以访问与Xamarin Forms视图关联的基础Android窗口小部件。这意味着你也可以获得Android .id属性。
请注意:
答案 1 :(得分:-2)
wolenjager的答案基本上是正确的,但为了更容易,我甚至不会创建自定义控件。即时通讯创建基本编辑器的自定义渲染器(Android中的TextEdit)在我的情况下,我在整个应用程序中只有1个编辑器
[assembly: ExportRenderer(typeof(Editor), typeof(EditorRender))]
命名空间YournNameSpace.Droid.PlatformSpecific {
using Android.Views.InputMethods;
using Xamarin.Forms.Platform.Android;
public class EditorRender : EditorRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Editor> e)
{
this.Id = 1111111908; //some id i can remember
base.OnElementChanged(e); // when the control actually gets created
}
}
然后当我需要去获取这个TextEdit时,ps“this”是MainActivity
View RootView = this.FindViewById(Android.Resource.Id.Content);
var textEdit = RootView.RootView.FindViewById(1111111908);