android - TextView 文本格式导致双倍空间上的最后一个符号删除

标签 android xamarin

我需要将输入到 TextView 中的文本格式化为“11 11 111111”格式

我创建了自定义 TextFormatter

class DocumentTextWatcher : Java.Lang.Object, ITextWatcher
{
    private EditText _et;

    int _state = 0;

    public DocumentTextWatcher(EditText et)
    {
        _et = et;
    }

    public void AfterTextChanged(IEditable s)
    {
        if (_state < 1)
        {
            _state++;

            var text = s.ToString();
            var str = new Java.Lang.String(DocumentFormatter.FormatNumber(text).ToUpperInvariant());

            s.Replace(0, text.Length, str, 0, str.Length());
        }
        else
        {
            _state = 0;
        }
    }

    public void BeforeTextChanged(Java.Lang.ICharSequence s, int start, int count, int after)
    {
    }

    public void OnTextChanged(Java.Lang.ICharSequence s, int start, int before, int count)
    {
    }
}

我为 TextView 创建了自定义主题

<style name="Widget.FinesTheme.Number" parent="Widget.FinesTheme.EditText">    
  <item name="android:capitalize">characters</item>
  <item name="android:maxLength">12</item>
  <item name="android:singleLine">true</item>
  <item name="android:inputType">textCapCharacters|textFilter|textNoSuggestions</item>
  <item name="android:digits">@string/filter_list</item>   
</style>

过滤器列表是=

<'string name="filter_list">0 123456789АВЕКМНОРСТХУABEKMHOPCTXY</string>

几乎一切正常,除了当我点击空格两次时它有时会删除最后一个符号。我无法绕过这种行为。

最佳答案

我昨天偶然发现了同样的问题。 Google 键盘或 EditText 实现似乎存在错误。当您双击空格键时,它会自动用一个句点和一个空格替换这两个空格。我认为这就是最后一个角色消失的问题的来源。

关于修复,设置 android:inputType="textPasswordVisible" 似乎可以解决问题。

附言。我看到你的数字只包含大写字符。如果您想将用户输入的内容大写,您可以使用 android:inputType="textVisiblePassword|textCapCharacters" 并将 InputFilter.AllCaps 过滤器添加到您的 EditText。

关于android - TextView 文本格式导致双倍空间上的最后一个符号删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28347228/

相关文章:

android - 在 Canvas 上绘制 fragment View

java - Android:格式化字符串并添加粗体样式

android - 将 Android 上使用 ML Kit 进行自拍分割的分割结果保存为具有透明背景的位图

c# - 将数据从 fragment 发送到 Activity android C#

firebase - 错误 : package com. google.firebase.messaging 不存在

c# - 无效的资源目录名称: “res animation” aapt.exe

android - Samsung Galaxy S adb 驱动程序详细信息?

java - 禁用手机横向但允许平板电脑

xamarin - MvvmCross 4 和 Xamarin.iOS -> 使用 Storyboard时如何从 Core 加载 View Controller ?

c# - 在 ios 文档选择器中按 .docx 过滤