1

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

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 的键盘只显示完成,即使复选框被选中或未选中。我应该怎么做才能纠正这个?

4

1 回答 1

1

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

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

于 2012-10-31T14:28:52.583 回答