Xamarin.Forms:如何只允许数字和点
Posted
技术标签:
【中文标题】Xamarin.Forms:如何只允许数字和点【英文标题】:Xamarin.Forms: how to only allow numbers and dots 【发布时间】:2021-10-07 20:24:46 【问题描述】:我只需要允许从键盘输入数字和点。我为 android 创建了一个自定义渲染器,它继承自 EntryRenderer 并覆盖了 OnElementChanged 方法,如下所示:
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
base.OnElementChanged(e);
if (Control != null && Element is EntryOnlyNumber entryOnlyNumber)
string acceptedValue = "1234567890";
if (entryOnlyNumber.AcceptComma)
acceptedValue += ",";
if (entryOnlyNumber.AcceptDot)
acceptedValue += ".";
Control.KeyListener = DigitsKeyListener.GetInstance(acceptedValue);
这是xaml中的代码:
<StackLayout Orientation="Horizontal" VerticalOptions="StartAndExpand"
Padding="10,20" Spacing="0">
<Label Text="Indirizzo server:" />
<controls:EntryOnlyNumber x:Name="EntryAddress" Text="Binding IdAddress" HorizontalOptions="FillAndExpand" WidthRequest="100" AcceptDot="True"/>
<Label Text=":" />
<controls:EntryOnlyNumber x:Name="EntryPort" Text="Binding Port"
</StackLayout>
但这是 Android 7 上的结果:
如您所见,键盘中缺少点。我应该怎么做才能解决这个问题?
【问题讨论】:
你在哪里设置键盘类型? 我没有设置布局。我离开了默认 您必须做一些事情才能将键盘设置为数字 【参考方案1】:正如 Jason 所说,用户与条目交互时显示的键盘可以通过 Keyboard 属性以编程方式设置为 Keyboard 类中的以下属性之一:
聊天 - 用于发短信和表情符号有用的地方。
默认 – 默认键盘。
电子邮件 - 用于输入电子邮件地址。
数字 - 用于输入数字。
Plain – 输入文本时使用,未指定任何 KeyboardFlags。
电话 - 用于输入电话号码。
文本 – 输入文本时使用。
Url - 用于输入文件路径和网址。
所以你可以customize the keyboard,不需要使用Entry渲染。
<StackLayout>
<Entry Keyboard="Numeric" />
</StackLayout>
更新:
您可以使用以下代码:
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
base.OnElementChanged(e);
if (Control != null)
this.Control.KeyListener = DigitsKeyListener.GetInstance("1234567890,.");
【讨论】:
这个建议不能满足我的要求,因为如果我设置键盘 = 数字,我就不能在条目中插入更多的点,例如在插入 IP 地址的情况下。这就是我尝试使用 Entry Render 的原因 正如您在我最初的问题中看到的那样,我实现的代码与您建议的代码相似,但它仅适用于模拟器,而在物理 Android 6 或 7 设备上显示结果在图像中。所以我不理解这种不同的行为。 @Kronos 我在小米 Note LTE android 6.0 设备上测试我的代码,请看我上面的截图。 我不明白。在我的 LG Q8 设备上,我看不到点键。可能与我设备上的默认键盘布局有关? @Kronos 我也在 Google 像素 Android 10 上进行了测试,它与上面的第一个屏幕截图相同。所以我认为这与设备键盘布局有关。以上是关于Xamarin.Forms:如何只允许数字和点的主要内容,如果未能解决你的问题,请参考以下文章
在运行时使用 Xamarin.Forms.Maps 创建折线时如何附加位置?