EditText错误:按下受限字符后内容重复

时间:2014-04-26 12:42:46

标签: android android-edittext

我有一个带有限制字符的EditText。我只允许数字为

Galaxy S4出现了一件奇怪的事情。它没有出现HTC Desire HD,HTC Desire X和ZTE Blade。

  1. 我输入dddsss
  2. 我输入了一个瑞典字符,如å
  3. 它没有显示,因为它不是允许的字符,所以内容仍然是dddsss
  4. 我输入一个字符,例如u
  5. EditText的内容变为dddsssdddsssu
  6. 我输入另一个字符,例如t,内容变为dddsssdddsssudddsssut
  7. 当我按下退格键时,有时会发生这种情况,因此必须按下按钮问题。

    我添加了android:inputType="textNoSuggestions",但没有帮助。

    <EditText
          android:id="@+id/comment_et"
          android:layout_width="0dp"
          android:layout_height="45dp"
          android:layout_marginRight="5dp"
          android:layout_weight="1"
          android:paddingLeft="5dp"
          android:paddingRight="5dp"
          android:background="@drawable/idea_edittext"
          android:digits="abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ,0,1,2,3,4,5,6,7,8,9,*,!,@,#,$,%,^,(,),_,+,-,[,],{,},:,;,&apos;,|,\,.,/,ß,?,~,="
          android:inputType="textCapSentences|textNoSuggestions"
          android:textSize="16dp" />
    

    有没有人经历过这个?

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,并将EditText的inputtype更改为:

android:inputType="text|textNoSuggestions"

我不知道这是否是一个合适的解决方案,但对我来说没问题。

答案 1 :(得分:0)

就个人而言,将EditText的inputtype更改为:

android:inputType="text|textNoSuggestions"

没用。但我注意到按下后退键时不再发生内容复制。我知道这可能不是解决问题的正确方法,但是等待一个真正的解决方案,如果它可以帮助一些人,我在EditText上做了一个小技巧来解决问题:

 private string formerText = null;
 private bool isEditLocked = false;

 editText.TextChanged += (sender, e) =>
            {
                if (!isEditLocked)
                {
                    var currentSelection = editText.SelectionStart;
                    isEditLocked = true;
                    if (formerText != null && editText.Text == formerText)
                    {
                        if (editText.Text.Length == 0)
                        {
                            editText.Text = "";
                        }
                        else
                        {
                            var lastChar = editText.Text[editText.Text.Length - 1];
                            editText.Text = editText.Text.Remove(editText.Text.Length - 1);
                            editText.Text += lastChar;
                        }
                    }
                    formerText = editText.Text;
                    editText.SetSelection(currentSelection);
                    isEditLocked = false;
                }
            };

正如您所看到的,我只是以编程方式删除了EditText的最后一个字符,然后再次添加它,然后复制问题就消失了。

请注意,这是Xamarin.Android代码,因此编写的是C#,但您应该能够很容易地将其转换为Java(editText.Text = ...成为editText.setText(...)等等上)。

如果有人找到这个问题的真正解决方案,请将其发布在那里,因为它仍然会在2017年9月发生