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

如何允许 html5 数字输入类型的逗号和点分隔符

在运行时使用 Xamarin.Forms.Maps 创建折线时如何附加位置?

如何在 Xamarin.Forms 上调用 HTTP2

Xamarin.forms - 如何在 MapView 上创建可拖动元素(标记)?

Xamarin.Forms - SkiaSharp 在后台线程中绘图