当编辑文本完成正在编辑了解当编辑文本完成正在编辑了解(Knowing when Edit text

2019-05-13 08:59发布

我怎么知道,当我编辑文本完成正在编辑? 就像当用户选择下一个框,或按软键盘上的完成按钮。

我想知道这一点,所以我可以夹住输入。 它看起来每输入一个字符后,如文本观察者的afterTextChanged发生。 我需要做一些计算和输入,所以我想每输入一个字符后,以避免做计算。

谢谢

Answer 1:

通过使用这样的事情

 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;
        }
    });


Answer 2:

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();
        }
    });


Answer 3:

使用这样定义的一个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)当用户点击软键盘(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);
            }
        }
    });

这对我的作品。 您可以隐藏软键盘后进行使用这样的代码的计算:

private void hideKeyboard(EditText editText)
{
    InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

编辑:添加返回值来onEditorAction



Answer 4:

我已经这样做了简单的事情,当焦点从编辑文本转向获取文本。 如果用户将焦点移到选择像的按钮或其他的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();
             }
        }
    });


Answer 5:

更高水平你可以使用TextWatcher的afterTextChanged()方法。



文章来源: Knowing when Edit text is done being edited