如何解决Galaxy数字键盘噩梦



我一直被三星Galaxy数字键盘的十进制分隔符困扰着。

我有一个Entry,我必须只接受数值(包括小数),所以在我的xaml代码中,我写了<Entry Keyboard="Numeric"/>,它在VS19 android模拟器上工作得很好。但是当我在我的物理设备(三星Galaxy S10+)上运行应用程序时,逗号键被禁用,.-键不起作用(它没有键入任何内容)。

我在网上查了一下,找到了一些解决方案,但没有一个适合我。

解决方案1通过将以下代码添加到App()(在App.xaml.cs中),强制应用程序文化为pt-BR(因为我的电话系统语言是巴西葡萄牙语):

private void SetCultureToPTBR()
{
CultureInfo br = new CultureInfo("pt-BR");
CultureInfo.DefaultThreadCurrentCulture = br;
}

但没有变化。

解决方案2为条目设置自定义呈现器上的输入类型:

[assembly: ExportRenderer(typeof(Entry), typeof(CustomEntryRenderer))]
namespace AppCoperNitro.Droid.CustomRenderers
{
public class CustomEntryRenderer : EntryRenderer
{
public CustomEntryRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control == null || e.NewElement == null)
return;

this.Control.KeyListener = DigitsKeyListener.GetInstance(true, true);
this.Control.InputType = Android.Text.InputTypes.ClassNumber | Android.Text.InputTypes.NumberFlagDecimal;
}
}
}

此方法将.-键更改为逗号键,并且它有点工作(它输入a .),但小数点被忽略(如果我输入2.3,应用程序将其接收为23)。

解决方案3这个解决方案,但结果与解决方案2相同。

我也试着把这些解决方案和它们的方差结合起来,但没有什么是它应该的方式。我甚至不关心条目是逗号还是点,我只需要正确接收十进制数。

我们可以改变方式。根据您的解决方案2,条目可以输入.,因此您可以在条目的UnFocused事件中执行一些操作。//使用Gabic的代码

private void Entry_Unfocused(object sender, FocusEventArgs e)
{
Entry entry = sender as Entry;
if (entry.Text.Length > 0 && Android.OS.Build.Manufacturer.Equals("Samsung", StringComparison.CurrentCultureIgnoreCase)) 
{ 
string a = entry.Text.Replace('.', ',');
entry.Text = a; 
}
}

然后将事件添加到xaml:

<Entry Keyboard="Numeric" Unfocused="Entry_Unfocused"/>

最新更新