如何更改键盘按钮 "Go" 功能

How do I change keyboard button "Go" functionality

我的应用以用户登录开始。

当用户按下 "Enter" 按钮时(在他在从 sqlite 获取数据的 gridview 上标记自己之后)。该应用程序通过 inflater 打开警报对话框。

    if (gridView.isClickable()){

        Toast.makeText(getApplicationContext(), "Waiter selected", Toast.LENGTH_LONG).show();

        LayoutInflater inflater = getLayoutInflater();
        View dialogLayout = inflater.inflate(R.layout.password_dialog, null);

        AlertDialog.Builder passwordDialog = new AlertDialog.Builder(MainActivity.this);

XML文件(布局)只有一个编辑文本,用户需要在这个编辑文本上填写

他自己的密码:

 passwordDialog.setTitle(getString(R.string.get_id_uniq));
        passwordDialog.setMessage(getString(R.string.enter_id));


 passwordDialog.setView(dialogLayout);

        passwordDialog.setPositiveButton(getString(R.string.next),
        new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                password = input.getText().toString();

现在的问题是,当用户单击编辑文本时,键盘打开并 然后他输入密码,完成后按下 "Go" 按钮 键盘,键盘关闭,但这还不够,现在他需要再次按下警报对话框按钮,然后应用程序才会检查密码是否正确,并将他移至下一个 activity。

我尝试使用 - android:imeOptions="actionNext"

还有 "Done", "Go" & "Send" , none 帮助。

如何防止双击 2 个不同的按钮并从键盘按钮发送数据并跳过按下对话框按钮的需要?

你可以这样做:

  1. dialog 类型改为 AlertDialog,而不是 AlertDialog.Builder - 这将允许您关闭(关闭)对话框。
  2. 使用 setOnEditorActionListener 代替 setPositiveButton
  3. 进行输入
  4. 调用dialog.dismiss();当用户点击键盘上的完成时。

它看起来应该是这样的:

AlertDialog dialog = new AlertDialog.Builder(this).create();//note dialog's type
    dialog.setTitle("Let's check it");
    EditText input = new EditText(this);
    dialog.setView(input);//assume this is your input
    input.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(actionId == EditorInfo.IME_ACTION_DONE){
                //What to do when user clicked Done button
                Log.i("user's password:", v.getText().toString());//v.getText().toString(); is what's user has entered
                dialog.dismiss();//close Alert Dialog
                return true;
            }
            return false;
        }
    });