当前位置: 首页 > 知识库问答 >
问题:

文本观察器在“可编辑”中的更改后更改文本不会影响可编辑内容本身

家弘业
2023-03-14

我正试图在一个需要过滤非数字字符和点的编辑文本上实现一个过滤器。我可以使用编辑文本或输入类型的数字标签,但似乎设备之间有轻微的差异,就像有些设备即使在编辑文本中过滤它们也显示点字符。

下面是afterTextChanged方法

if(isEditing) return;
            Log.v("Information", "last: " + s.charAt(s.length()-1));
            Log.v("Information", "Full string before: " + s.toString());
            if(s.charAt(s.length()-1) == '.') {
                Log.v("Information", "DOT!");
                isEditing = true;
                String currentText = s.toString().replace(".", "");
                s.replace(0, s.length(),  currentText);
                isEditing = false;
                Log.v("Information", "Full string after: " + s.toString());
                return;
            }
            else if(!Character.isDigit(s.charAt(s.length()-1))) {
                Log.v("Information", "NOT DIGIT!");
                isEditing = true;
                String currentText = "";
                if(s.length() > 1)
                    currentText = s.toString().substring(0, s.length()-1);
                s.replace(0, s.length(), currentText);
                isEditing = false;
                Log.v("Information", "Full string after: " + s.toString());
                return;
            } 

这是输出结果

last: 6
Full string before: 6
Full string after: 6
last: 6
Full string before: 66
Full string after: 66
last: h
Full string before: 66h
NOT DIGIT!
Full string after: 66
last: h
Full string before: 66hh
NOT DIGIT!
Full string after: 66h

如您所见,在我删除第一个“h”后,当我输入另一个h时,字符串变为“66hh”,其中它应该是“66h”,因为我已经删除了第一个h。什么原因会阻止我对可编辑的更改?

编辑:忘了提一下,这是我的编辑文本

 <core.globals.views.EditTextWithCursorWatcher
                    android:id="@+id/edittext"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="8"
                    android:background="@null"
                    android:ellipsize="end"
                    android:gravity="right"
                    android:hint="0,00"
                    android:maxLength="15"
                    android:paddingLeft="5dp"
                    android:paddingRight="5dp"
                    android:singleLine="true"
                    android:text="0,00"
                    android:textColor="#ff414141"
                    android:textColorHint="#ff414141"
                    android:textSize="16sp" />

共有1个答案

贝自怡
2023-03-14

我只是使用自定义Inputfilter创建工作演示。试试这个

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText edtText = (EditText) findViewById(R.id.edtText);

        InputFilter filter = new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {

                try {
                    if (!Character.isDigit(source.charAt(0))) {
                        if (source.equals(",")) {
                            if (dend == 0) {
                                return "";
                            } else {
                                if (("" + edtText.getText().toString().charAt(edtText.getText().toString().length() - 1)).equals(",")) {
                                    return "";
                                } else {
                                    return null;
                                }
                            }
                        } else {
                            return "";
                        }
                    }
                } catch (Exception e) {
                }
                return null;
            }
        };
        edtText.setFilters(new InputFilter[] { filter });

    }
 类似资料:
  • 我必须取编辑文本的值并将其除以1.21....错误在哪里 错误:

  • 在我的Android项目中,我必须将TextChangedListener(TextWatcher)添加到编辑文本视图中。它有三个部分: < Li > < code > ontext changed() < Li > < code > beforeTextChanged() < Li > < code > afterTextChanged() 这三个有什么区别?我必须在键侦听器上实现一个表搜索,对

  • 问题内容: 我有一个 可编辑的 JComboBox,无论何时通过键入或选择更改文本,我都想在其中进行一些操作。在这种情况下,文本是一个模式,我想验证该模式是否有效,并显示导致某些测试数据匹配的内容。 完成显而易见的操作后,附加一个ActionHandler,我发现,对于键入而言,该事件充其量似乎是不可靠的(选择很好)。而当它 做 火打字的结果,文字检索(使用getEditor()。getItem(

  • Ruby我已经开始在我的Ruby代码中插入不可编辑的文本,我觉得这很烦人。例如,这个简单的rSpec表达式: ...变成了这样: 另一个例子是: ...变成了这样: 如何关闭此功能?

  • 有人知道如何更改记事本中的背景颜色、字体大小和其他基于外观的设置吗?默认值为白色,但我正试图将其更改为深灰色或其他颜色。

  • 我在中有一个,底线颜色不是我想要的,我不知道如何更改它。 这是我到目前为止所拥有的。 出于某种不起作用的奇怪原因,应该是它。