【问题标题】:Android TextWatcher Replace Underscores While TypingAndroid TextWatcher 在键入时替换下划线
【发布时间】:2023-03-14 12:16:02
【问题描述】:

简介: 我目前正在尝试为我的填字游戏实现EditText 的输入法,用户在EditText 中看到类似"____" 的内容。下划线标记缺少的字母,输入的第一个字符将填充第一个下划线。 当然,拼图中的其他单元格可能已经解决了,所以EditText 文本可能是"ST_CKOV_RF_OW"。我已经在我自己的输入视图中拥有了所有这些功能,这是一个视图的子类,被覆盖了onDraw()。这工作得很好,只是视图不会出现在某些较低的 Android 版本上,并且后退键滑过我的输入例程并且无法访问。

所以我想我会用EditText 来做这件事,实现TextWatcher 并且没问题,但我无法让它正常工作。我现在正在工作,我可以使用键盘输入字母,但是 Backspace 再次不起作用,当然,如果用户触摸到 EditText,位置就会变得混乱。

public void beforeTextChanged(CharSequence s,int start,int count, int after){
                    et.removeTextChangedListener(textWatcher);
                    int position = text.indexOf("_");
                    if(position==-1) onAnswerEntered(et.getText().toString().replace("_", "")); //finished
                    else {
                        et.setSelection(et.getText().toString().indexOf("_"));
                        et.addTextChangedListener(textWatcher);
                    }
                } 


public void onTextChanged(CharSequence s, int start, int before, int count) {
                    et.removeTextChangedListener(textWatcher);
                    try {                   
                        String currentKey = s.toString().substring(start, start+1);
                        Logger.log("Current Key", currentKey);

                        int position = text.indexOf("_");
                        Logger.log("Current Position _ ", position+"");

                        //replace _ with key
                        String sbefore=text.substring(0, position);
                        String safter=text.substring(position+1, text.length());
                        text=sbefore+currentKey+safter;

                        int positionNext = text.indexOf("_");
                        Logger.log("Next Position _ ", positionNext+"");

                        if(positionNext==-1) onAnswerEntered(et.getText().toString().replace("_","")); //finished
                        else {
                            et.setText(text);
                            et.setSelection(et.getText().toString().indexOf("_"));
                            et.addTextChangedListener(textWatcher);
                        }


                    } catch(IndexOutOfBoundsException ioobe) {
                        ioobe.printStackTrace();
                    }

                }

我也尝试设置OnKeyListener,但它不适用于EditText(我可以获得退格事件,没有别的)

所以也许我完全走错了路,但请帮助我,给我一个线索,告诉我如何实现我的目标。谢谢。

【问题讨论】:

    标签: android textwatcher


    【解决方案1】:

    我放弃了它并实施了一种简单但有效的 hack。我现在在我的(隐藏的)EditText 中接收输入,输出转到可见的 TextView,中间的一个函数用来自 EditText 的输入填充“_”。 例如。

    提示 = "A_A_A_A" 编辑文本输入=“BBB” textview 显示“ABABABA”

    【讨论】:

      猜你喜欢
      • 2016-01-15
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多