Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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
C# Xamarin.Forms中的仅小写输入_C#_Android_Ios_Xamarin_Xamarin.forms - Fatal编程技术网

C# Xamarin.Forms中的仅小写输入

C# Xamarin.Forms中的仅小写输入,c#,android,ios,xamarin,xamarin.forms,C#,Android,Ios,Xamarin,Xamarin.forms,我正在构建一个Xamarin.Forms应用程序,用于iOS和Android。此应用程序的第一个页面是一个登录表单,其字段如下图所示 我的意图是让键盘(当关注用户名字段时)使用所有小写字符 我通过删除Keyboard=“Text”在物理Android设备上实现了这一点。然而,iOS仿真器似乎坚持大写是第一个字母的方式,当我在仿真器上安装软件键盘时,也显示了这种行为 在浏览谷歌的时候,我真的很难找到更多的信息。是否有人知道: Xamarin的预期行为。这里的形式 解决这个问题的方法 Xamari

我正在构建一个Xamarin.Forms应用程序,用于iOS和Android。此应用程序的第一个
页面
是一个登录表单,其字段如下图所示

我的意图是让键盘(当关注用户名字段时)使用所有小写字符

我通过删除
Keyboard=“Text”
在物理Android设备上实现了这一点。然而,iOS仿真器似乎坚持大写是第一个字母的方式,当我在仿真器上安装软件键盘时,也显示了这种行为

在浏览谷歌的时候,我真的很难找到更多的信息。是否有人知道:

  • Xamarin的预期行为。这里的形式
  • 解决这个问题的方法
  • Xamarin的预期行为。这里的形式

    iOS上的表单条目是通过本机的
    UITextField
    进行的,自动大写是通过iOS的键盘进行的,对于英语语言环境,默认iOS键盘的默认行为是大写

    您可以通过
    UITextField.AutocapitalizationType
    属性重写该行为

    应用于键入文本的自动大小写样式。此属性确定自动按下Shift键的时间。可以使用文本字段的autocapitalizationType属性以编程方式访问此属性的值

    例子: 解决这个问题的方法

    您可以定义表单的行为来处理该更改:

    或自定义
    条目
    iOs渲染器:

    UITextAutoCapitalization类型:
    我有一个类似的要求,只是我希望键盘显示所有大写字母以输入代码值。所以我使用了Xamarin提供的效果来实现这一点。 下面是将其大写的代码。但是你可以毫不费事地把它改成小写

    表格:

    namespace VINEntryApp.CustomControls
    {
        public class CapitalizeKeyboardEffect : RoutingEffect
        {
            public CapitalizeKeyboardEffect() : base("Company.CapitalizeKeyboardEffect")
            {
            }
        }
    }
    
    机器人:

    [assembly: ResolutionGroupName("Company")]
    [assembly: ExportEffect(typeof(CapitalizeKeyboardEffect), nameof(CapitalizeKeyboardEffect))]
    namespace VINEntryApp.Droid.Custom
    {
        [Preserve]
        public class CapitalizeKeyboardEffect : PlatformEffect
        {
            private InputTypes _old;
            private IInputFilter[] _oldFilters;
    
            protected override void OnAttached()
            {
                var editText = Control as EditText;
                if (editText != null)
                {
                    _old = editText.InputType;
                    _oldFilters = editText.GetFilters().ToArray();
    
                    editText.SetRawInputType(InputTypes.ClassText | InputTypes.TextFlagCapCharacters);
    
                    var newFilters = _oldFilters.ToList();
                    newFilters.Add(new InputFilterAllCaps());
                    editText.SetFilters(newFilters.ToArray());
                }
            }
    
            protected override void OnDetached()
            {
                var editText = Control as EditText;
                if (editText != null)
                {
                    editText.SetRawInputType(_old);
                    editText.SetFilters(_oldFilters);
                }
            }
        }
    }
    
    iOS:

    使用:

    
    
    解决方案 最后,以编程方式设置
    条目
    键盘
    属性(如下所示)非常有吸引力,无需特定于平台的代码:

    UsernameEntry.Keyboard = Keyboard.Create(KeyboardFlags.None);
    
    细节 在Xamarin.Forms的源代码中,会检查Xamarin键盘类型,以确定特定于平台的键盘的行为。这方面的一个例子如下:

    if (keyboard == Keyboard.Default)
    {
        textInput.AutocapitalizationType = UITextAutocapitalizationType.Sentences;
    

    我从alexgavru那里找到了一个简单的xaml解决方案。
    为我工作。

    您可以使用TextTransform=“小写”


    迟做总比不做强

    为匆忙将您的答案标记为已接受而道歉-在这样做之前,您应该先尝试代码。感谢您的快速建议。对于匆忙将您的答案标记为已接受,我深表歉意-在这样做之前应该先尝试代码。谢谢你的快速建议。谢谢。这在Xamarin上非常有效。表格4.6
    [assembly: ResolutionGroupName("Company")]
    [assembly: ExportEffect(typeof(CapitalizeKeyboardEffect), nameof(CapitalizeKeyboardEffect))]
    namespace VINEntryApp.iOS.Custom
    {
        [Preserve]
        public class CapitalizeKeyboardEffect : PlatformEffect
        {
            private UITextAutocapitalizationType _old;
    
            protected override void OnAttached()
            {
                var editText = Control as UITextField;
                if (editText != null)
                {
                    _old = editText.AutocapitalizationType;
                    editText.AutocapitalizationType = UITextAutocapitalizationType.AllCharacters;
                }
            }
    
            protected override void OnDetached()
            {
                var editText = Control as UITextField;
                if (editText != null)
                    editText.AutocapitalizationType = _old;
            }
        }
    }
    
    <Entry>
         <Entry.Effects>
                        <custom:CapitalizeKeyboardEffect />
         </Entry.Effects>
    <Entry>
    
    UsernameEntry.Keyboard = Keyboard.Create(KeyboardFlags.None);
    
    if (keyboard == Keyboard.Default)
    {
        textInput.AutocapitalizationType = UITextAutocapitalizationType.Sentences;