我有一套由for循环生成的EditText
字段。每次编辑该字段时,我需要运行一些计算并更新其他文本字段(请考虑Excel电子表格总和)。检测解除键盘(通过后退按钮)在EditText
我的逻辑正在工作,我甚至设置了将最后一个字段的向下焦点更改替换为第一个字段(以避免键盘上显示“完成”按钮)。
但是,如果用户按下“后退”按钮关闭键盘,焦点不会改变,计算也不会完成。输入的数字不同,但现在总数是错误的。当键盘被解散时,我无法找到检测到的位置,所以我可以解决这个问题。
我现在拥有的一切:
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);
我也试图把这个代码setOnEditorActionListener
,setOnClickListener
和setOnKeyListener
。
除了其中一些未按预期工作,如果按下后退按钮以关闭键盘,它们都不会触发。我在网上搜索,但只提出了如何用我自己的按钮手动隐藏键盘的建议;我似乎无法找到有关平板电脑本身后退按钮的任何信息。
我怎样才能检测到键盘已被解雇,所以我可以强制更改焦点(或只是重新运行计算代码)?
更新: 没有标记这个作为回答,因为这不回答这个特定的问题,但我目前通过切换到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) {
}
});
但我会从哪里调用?我的问题并不是我无法弄清楚如何检测键盘是否存在,以及当按下后退按钮来解除键盘时,我无法找到适当的“onWhatever”。 –
第一次后退按钮并不是解除你的键盘的唯一方法。所以关注与相关的键盘火灾事件的可见性不与后退按钮,你可以在onCreate里面读取关于android:imeOptions –