我想实时修改用户在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
}
}
});
答案 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,可能会发生,有时候我的模拟器键盘也有一些问题......无论如何,你还在使用原生模拟器吗?你应该明星使用这个:真棒,速度更快!
考虑你的问题......也许你应该在用户结束时应用字符过滤器,我的意思是,当编辑文本失去焦点时......可能是更好的解决方案。
检测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) {
}
});
}
}