有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java检测EditText中的键盘(通过后退按钮)被取消

我有一组由for循环生成的EditText字段。每次编辑该字段时,我都需要运行一些计算并更新其他文本字段(想想excel电子表格汇总)

我的逻辑工作正常,我甚至将它设置为将最后一个字段的向下焦点更改替换为第一个字段(以避免键盘上显示“完成”按钮)

但是,如果用户按下“上一步”按钮关闭键盘,则不会更改焦点,也不会进行计算。输入的数字不同,但现在总数是错误的。我找不到哪里可以检测键盘何时被关闭,所以我可以解决这个问题

我现在所拥有的:

final EditText etWeight = new EditText(this);
etWeight.setText("initWt");
etWeight.setSelectAllOnFocus(true);
etWeight.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        //code to update after weight is changed
    }
));
llWeightRow.addView(etWeight);

我还尝试将此代码放入setOnEditorActionListenersetOnClickListenersetOnKeyListener

除了其中一些没有按预期工作外,如果按下后退按钮关闭键盘,它们似乎都不会触发。我在网上搜索过,但只提出了如何用自己的按钮手动隐藏键盘的建议;我似乎找不到任何关于平板电脑上“后退”按钮的信息

我如何才能检测到键盘已被关闭,以便强制更改焦点(或只是重新运行计算代码)

更新: 没有将此标记为已回答,因为这并没有回答此特定问题,但我目前正在通过切换到onTextChanged方法生成所需的结果(其他字段总是更新)。现在,每当EditText中的任何文本发生更改时,这些值都会更新

etWeight.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence cs, int i, int i1, int i2) {
    }
    @Override
    public void onTextChanged(CharSequence cs, int i, int i1, int i2) {
        //calc and update code
    }
    @Override
    public void afterTextChanged(Editable editable) {
    }
});

共 (2) 个答案

  1. # 1 楼答案

    试试这个

    InputMethodManager imm = (InputMethodManager) ActivityName.this.getSystemService(Context.INPUT_METHOD_SERVICE);
    
            if (imm.isAcceptingText()) {
                Log.d(TAG,"Software Keyboard was shown");
            } else {
                Log.d(TAG,"Software Keyboard was not shown");
            }
    
  2. # 2 楼答案

    你有没有试过覆盖onBackPressed?你可以集中注意力进行操作

    @Override
    public void onBackPressed() {
        // Make needed preparations here
        super.onBackPressed();
    }