如何知道我的编辑文本何时完成编辑?就像当用户选择下一个框,或按下软键盘上的完成按钮一样。
我想知道这一点,所以我可以限制输入。在输入每个字符后,看起来像文本观察者的afterTextChanged。我需要对输入进行一些计算,所以我想在输入每个字符后避免进行计算。
感谢
答案 0 :(得分:103)
使用类似的东西
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;
}
});
答案 1 :(得分:42)
EditText
继承了setOnFocusChangeListener
,OnFocusChangeListener
实现了onFocusChange
。
实施hasFocus
并且 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();
}
});
有一个布尔参数。如果这是错误的,你就会失去对另一个控件的关注。
修改强>
要处理这两种情况 - 编辑失去焦点的文本或用户点击“完成”按钮 - 创建一个从两个侦听器调用的方法。
{{1}}
答案 2 :(得分:14)
使用如下定义的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" />
当用户单击软键盘上的完成按钮(OnEditorActionListener)或ii)当EditText丢失了用户焦点(OnFocusChangeListener)时,我们可以捕获其文本i),该焦点现在位于另一个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);
}
}
});
这对我有用。使用如下代码进行计算后,您可以隐藏软键盘:
private void hideKeyboard(EditText editText)
{
InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
修改:将返回值添加到onEditorAction
答案 3 :(得分:2)
我做了这个简单的事情,当焦点从编辑文本转移到文本。如果用户将焦点移动到选择其他视图(如按钮或其他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();
}
}
});