如何知道我的编辑文本何时完成编辑?例如当用户选择下一个框或按软键盘上的完成按钮时。
我想知道这一点,以便我可以夹紧输入。看起来文本监视器的afterTextChanged在每个字符输入后发生。我需要对输入进行一些计算,因此我想避免在每个字符输入后进行计算。
谢谢
如何知道我的编辑文本何时完成编辑?例如当用户选择下一个框或按软键盘上的完成按钮时。
我想知道这一点,以便我可以夹紧输入。看起来文本监视器的afterTextChanged在每个字符输入后发生。我需要对输入进行一些计算,因此我想避免在每个字符输入后进行计算。
谢谢
通过使用这样的东西
meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId){
case EditorInfo.IME_ACTION_DONE:
case EditorInfo.IME_ACTION_NEXT:
case EditorInfo.IME_ACTION_PREVIOUS:
yourcalc();
return true;
}
return false;
}
});
EditText
继承了setOnFocusChangeListener
方法,该方法需要实现OnFocusChangeListener
接口。
实现onFocusChange
方法时,会有一个boolean类型的参数hasFocus
。当hasFocus
为false时,表示焦点转移到了其他控件上。
编辑
为了同时处理两种情况——编辑文本失去焦点或用户点击"完成"按钮——创建一个统一的方法,并且该方法可以从这两个监听器中调用。
private void calculate() { ... }
btnDone.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
calculate();
}
});
txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus)
calculate();
}
});
使用像这样定义的EditText对象xml:
<EditText
android:id="@+id/create_survey_newquestion_editText_minvalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:ems="4"
android:imeOptions="actionDone"
android:inputType="number" />
我们可以在以下两种情况下捕获文本:i)当用户点击软键盘上的Done按钮(OnEditorActionListener)时,或ii)当EditText失去焦点(OnFocusChangeListener),现在在另一个EditText上:
/**
* 3. Set the min value EditText listener
*/
editText= (EditText) this.viewGroup.findViewById(R.id.create_survey_newquestion_editText_minvalue);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
String input;
if(actionId == EditorInfo.IME_ACTION_DONE)
{
input= v.getText().toString();
MyActivity.calculate(input);
return true; // consume.
}
return false; // pass on to other listeners.
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
String input;
EditText editText;
if(!hasFocus)
{
editText= (EditText) v;
input= editText.getText().toString();
MyActivity.calculate(input);
}
}
});
这个对我有用。你可以使用类似以下代码的方法,在计算完成后隐藏软键盘:
```java InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); ```private void hideKeyboard(EditText editText)
{
InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
编辑:在onEditorAction中添加了返回值
我已经完成了这个简单的事情,当焦点从编辑文本移开时,获取文本。如果用户将焦点转移到其他视图(如按钮或其他EditText或任何视图),则此方法将起作用。
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
EditText editText = (EditText) v;
String text = editText.getText().toString();
}
}
});
为了更高级一点,你可以使用TextWatcher的afterTextChanged()方法。
EditorInfo.IME_ACTION_NEXT
和IME_ACTION_PREVIOUS
这样的操作。我刚刚编辑了答案,将它们添加到了代码中。 - Kostanos