C# Xamarin.Forms中的仅小写输入
我正在构建一个Xamarin.Forms应用程序,用于iOS和Android。此应用程序的第一个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
页面
是一个登录表单,其字段如下图所示
我的意图是让键盘(当关注用户名字段时)使用所有小写字符
我通过删除Keyboard=“Text”
在物理Android设备上实现了这一点。然而,iOS仿真器似乎坚持大写是第一个字母的方式,当我在仿真器上安装软件键盘时,也显示了这种行为
在浏览谷歌的时候,我真的很难找到更多的信息。是否有人知道:
UITextField
进行的,自动大写是通过iOS的键盘进行的,对于英语语言环境,默认iOS键盘的默认行为是大写
您可以通过UITextField.AutocapitalizationType
属性重写该行为
应用于键入文本的自动大小写样式。此属性确定自动按下Shift键的时间。可以使用文本字段的autocapitalizationType属性以编程方式访问此属性的值
例子:
解决这个问题的方法
您可以定义表单的行为来处理该更改:
条目
iOs渲染器:
我有一个类似的要求,只是我希望键盘显示所有大写字母以输入代码值。所以我使用了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;