Android:在输入时修改EditText

时间:2014-04-03 12:14:32

标签: android android-edittext

我想实时修改用户在EditText中输入的内容 它将进行哪种修改没有区别(例如,我想删除所有已输入的字母)。
在JavaSE中,我可以使用DocumentFilter来实现这一点,DocumentFilter是每个JTextField的Document的附件,但是我无法弄清楚如何在Android中实现它。

另一个小问题:在Eclipse中执行Android模拟器方面的setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS)?我问,因为在我的案例中,它一开始似乎有效,但是在出现几个字母建议之后。

// ---------------解决方案基于Naveen Kumar的答案---------------- //
<登记/> 如果用户按下回车键,则此代码会做出反应(我知道可能存在比较键码的反应,但在我的情况下这更好):

searchInput.addTextChangedListener(new TextWatcher()
    {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            if (s.toString().contains("\n"))
            {
                searchInput.setText(s.toString().replace("\n", ""));
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {}

        @Override
        public void afterTextChanged(Editable s)
        {
            if (!s.toString().contains("\n"))
            {
               // DO SOMETHING
            }
        }
    });

2 个答案:

答案 0 :(得分:1)

您可以向editText添加一个观察者。这样,在文本更改时,可以修改文本。但无论如何,这种效果/事件对于用户来说可能是奇怪的。想象一下,你正在打字,同时,一些字母消失了。

EditText searchTo = (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {

        do_Something_Here();
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        or_maybe_do_Something_here();
    } 
});

关于emulato,可能会发生,有时候我的模拟器键盘也有一些问题......无论如何,你还在使用原生模拟器吗?你应该明星使用这个:真棒,速度更快!

Genymotion emulator

考虑你的问题......也许你应该在用户结束时应用字符过滤器,我的意思是,当编辑文本失去焦点时......可能是更好的解决方案。

检测edittext何时失去焦点:

txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          

    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus)
           //do job here owhen Edittext lose focus 
    }
});

如果有用,请投票给我;)

答案 1 :(得分:1)

您好我找到了您想要的逻辑解决方案,您将尝试这种逻辑,这将是一个例子并告诉我它是如何工作的......

文本观察器是在android中的编辑文本字段中监听文本更改的功能...使用下面的代码...

public class MainActivity extends Activity {

    private EditText text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (EditText)findViewById(R.id.text);
        text.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                System.out.println(s);
                if(s.length()>0)
                {
                    String newString = s.toString();
                    if(newString.contains("i")) {
                        String re = newString.replace("i", "");
                        text.setText(re);
                        text.setSelection(re.length());
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
    }

}