Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Visual as Material设置为Xamarin时无法获取Android本机元素。XF 5.0.0.2012中的表单条目控件 描述_Xamarin_Xamarin.forms_Xamarin.android_Material Design - Fatal编程技术网

将Visual as Material设置为Xamarin时无法获取Android本机元素。XF 5.0.0.2012中的表单条目控件 描述

将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

当我们为条目设置材质设计时,我们无法在android中获取本机元素

如果没有材料设计,我们可以获得原生文本

XF中的:4.8.0.1687。这很好用

XAML

 <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;
        }
    }
}
  • 请参见GetNativeEditText在可视为材质时返回空值
  • 预期行为 必须在材料设计中返回本机元素

    实际行为 在物料设计中返回空值

    基本信息
    • Xamarin.表格:5.0.0.2012
    • Xamarin.Forms.Visual.Material:5.0.0.2012
    样品

    当设置
    Visual=“Material”
    作为输入时,我得到
    Google.Android.Material.TextField.TextInputLayout
    ,而foreach
    TextInputLayout
    ,看不到
    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** {
    
                    }
                }