У меня было аналогичное требование, за исключением того, что я хотел, чтобы клавиатура показывала все заглавные буквы для ввода значения кода. Поэтому я использовал эффекты, предоставленные Xamarin, для достижения этой цели.
Вот код для его заглавной буквы. Но без каких-либо проблем вы можете изменить его на строчные.
Форма:
namespace VINEntryApp.CustomControls
{
public class CapitalizeKeyboardEffect : RoutingEffect
{
public CapitalizeKeyboardEffect() : base("Company.CapitalizeKeyboardEffect")
{
}
}
}
Droid:
[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:
[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>