更改键盘上的按钮

时间:2012-10-31 13:48:26

标签: android ime

我使用以下代码在键盘上的完成按钮和下一个按钮之间切换,具体取决于是否选中了复选框:

private OnClickListener checkBoxListener = new OnClickListener(){
@Override
public void onClick(View v) {
    CheckBox cb = (CheckBox) findViewById(R.id.checkbox_referralCode);
    EditText referralCode = (EditText) findViewById(R.id.referralCode);
    EditText phoneText = (EditText) findViewById(R.id.phoneText);

    if(cb.isChecked()) {
        referralCode.setVisibility(View.VISIBLE);
        phoneText.setImeOptions(0x00000005);

    }
    else
        referralCode.setVisibility(View.GONE);

}

}; 如果未首先选中该复选框,则phoneText的键盘将显示完成。当第一次选中该复选框时,接下来会显示phoneText的键盘。这正是我想要的。但是,我面临的问题是,当用户在首先检查后取消选中该复选框时,键盘仍然会在我希望它显示完成时显示。为了纠正这个问题,我在else语句中添加了以下行:

        phoneText.setImeOptions(0x00000006);

因此,我的新代码如下:

private OnClickListener checkBoxListener = new OnClickListener(){
@Override
public void onClick(View v) {
    CheckBox cb = (CheckBox) findViewById(R.id.checkbox_referralCode);
    EditText referralCode = (EditText) findViewById(R.id.referralCode);
    EditText phoneText = (EditText) findViewById(R.id.phoneText);

    if(cb.isChecked()) {
        referralCode.setVisibility(View.VISIBLE);
        phoneText.setImeOptions(0x00000005);

    }
    else {
        referralCode.setVisibility(View.GONE);
        phoneText.setImeOptions(0x00000006);
    }

}

};

但是,现在即使选中了复选框,phoneText的键盘也只显示完成。我该怎么做才能纠正这个问题?

1 个答案:

答案 0 :(得分:1)

取决于键盘。我知道例如Swype只会在重新加载后检查imeoptions。要尝试的一件事是隐藏键盘并在此事件中重新打开它。

最终你会遇到很多麻烦。问题是Android不是一个键盘 - 它有一个框架允许热键盘交换,但API并不总是很好定义,键盘开发人员必须猜测应该如何实现。我不认为在开发键盘的2年中我曾经有过一个app尝试在创建字段后更改字段的imeOptions。它可能以前从未做过,所以可能是框架甚至没有告诉键盘它们已经改变了。