将Visual as Material设置为Xamarin时无法获取Android本机元素。XF 5.0.0.2012中的表单条目控件 描述
当我们为条目设置材质设计时,我们无法在android中获取本机元素 如果没有材料设计,我们可以获得原生文本 XF中的:4.8.0.1687。这很好用 XAML将Visual as Material设置为Xamarin时无法获取Android本机元素。XF 5.0.0.2012中的表单条目控件 描述,xamarin,xamarin.forms,xamarin.android,material-design,Xamarin,Xamarin.forms,Xamarin.android,Material Design,当我们为条目设置材质设计时,我们无法在android中获取本机元素 如果没有材料设计,我们可以获得原生文本 XF中的:4.8.0.1687。这很好用 XAML <local:CustomView > <local:CustomView.Input> <Entry Visual="Material"/> </local:Custom
<local:CustomView >
<local:CustomView.Input>
<Entry Visual="Material"/>
</local:CustomView.Input>
</local:CustomView>
Android渲染器
...
[assembly: Forms.ExportRenderer(typeof(CustomView), typeof(CustomViewRenderer))]
namespace XF5Sample.Droid
{
public class CustomViewRenderer : ViewRenderer<CustomView, View>
{
private CustomView customView;
public CustomViewRenderer(global::Android.Content.Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<CustomView> e)
{
base.OnElementChanged(e);
var element = e.NewElement;
customView = element as CustomView;
}
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
if (Platform.GetRenderer(customView.Input) == null)
{
Platform.SetRenderer(customView.Input, Platform.CreateRendererWithContext(customView.Input, Context));
}
var renderer = Platform.GetRenderer(customView.Input);
if (renderer != null)
{
var nativeEditText = GetNativeEditText(renderer as ViewGroup);
if (nativeEditText != null && nativeEditText.Handle != IntPtr.Zero)
{
}
}
}
internal static EditText GetNativeEditText(ViewGroup viewGroup)
{
EditText editText = null;
if (editText == null && viewGroup is ViewGroup)
{
var childCount = viewGroup.ChildCount;
for (int i = 0; i < childCount; i++)
{
var child = viewGroup.GetChildAt(i);
if (child is EditText)
{
editText = child as EditText;
}
else if (child is ViewGroup)
{
editText = GetNativeEditText(child as ViewGroup);
}
else
{
return editText;
}
if (editText != null)
{
break;
}
}
}
return editText;
}
}
}
- Xamarin.表格:5.0.0.2012
- Xamarin.Forms.Visual.Material:5.0.0.2012
Visual=“Material”
作为输入时,我得到Google.Android.Material.TextField.TextInputLayout
,而foreachTextInputLayout
,看不到EditText
。
...
[assembly: Forms.ExportRenderer(typeof(CustomView), typeof(CustomViewRenderer))]
namespace XF5Sample.Droid
{
public class CustomViewRenderer : ViewRenderer<CustomView, View>
{
private CustomView customView;
public CustomViewRenderer(global::Android.Content.Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<CustomView> e)
{
base.OnElementChanged(e);
var element = e.NewElement;
customView = element as CustomView;
}
protected override void OnAttachedToWindow()
{
base.OnAttachedToWindow();
if (Platform.GetRenderer(customView.Input) == null)
{
Platform.SetRenderer(customView.Input, Platform.CreateRendererWithContext(customView.Input, Context));
}
var renderer = Platform.GetRenderer(customView.Input);
if (renderer != null)
{
var nativeEditText = GetNativeEditText(renderer as ViewGroup);
if (nativeEditText != null && nativeEditText.Handle != IntPtr.Zero)
{
}
}
}
internal static EditText GetNativeEditText(ViewGroup viewGroup)
{
EditText editText = null;
if (editText == null && viewGroup is ViewGroup)
{
var childCount = viewGroup.ChildCount;
for (int i = 0; i < childCount; i++)
{
var child = viewGroup.GetChildAt(i);
if (child is EditText)
{
editText = child as EditText;
}
else if (child is ViewGroup)
{
editText = GetNativeEditText(child as ViewGroup);
}
else
{
return editText;
}
if (editText != null)
{
break;
}
}
}
return editText;
}
}
}
if (renderer != null)
{
var nativeEditText = GetNativeEditText(renderer as ViewGroup);
if (nativeEditText != null && nativeEditText.Handle != IntPtr.Zero)
**Here** {
}
}