Android软键盘不会隐藏

cld4siwp  于 2022-12-16  发布在  Android
关注(0)|答案(1)|浏览(195)

我有这个Android应用程序,我试图工作,但当我试图保持软键盘隐藏在屏幕上(硬件包括键盘)为这个特定的警报对话框,它不会保持隐藏,尽管事实上,我遵循相同的设置作为以前的警报对话框,这确实工作。
下面的函数enterItem的功能与我预期的完全相同,这意味着当有人使用硬件输入数据时,它不会调出软键盘。

public void enterItem() {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    View viewInflated = LayoutInflater.from(context).inflate(R.layout.dialog_keyin_number_field, null);
    final EditText userInputDialogEditText = viewInflated.findViewById(R.id.keyInNumber);
    userInputDialogEditText.setBackgroundColor(getColor(R.color.colorPrimary));

    builder
            .setTitle(reason.getDescription())
            .setMessage("Enter/Scan Item: ")
            .setView(viewInflated)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String input = userInputDialogEditText.getText().toString();
                    if (StringUtils.isNotNullOrEmpty(input)) {
                        new AsyncVerifyItemWS().execute(input);
                    }
                }
            })
            .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });//end builder

    AlertDialog dialog = builder.create();
    dialog.show();

    userInputDialogEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(actionId == EditorInfo.IME_ACTION_UNSPECIFIED || actionId ==  EditorInfo.IME_ACTION_DONE){
                dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
            }
            return false;
        }
    });

    userInputDialogEditText.setShowSoftInputOnFocus(false);
}

然而,这个功能并不像我期望的那样起作用。我开始在硬件键盘上打字的第二秒,软键盘就会弹出,并且不会随着任何后续的点击而消失。

public void enterComment(){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    View viewInflated = LayoutInflater.from(context).inflate(R.layout.dialog_text_area_field, null);
    final EditText userInputDialogEditText = viewInflated.findViewById(R.id.keyInText);
    userInputDialogEditText.setBackgroundColor(getColor(R.color.lightGrey));

    builder
            .setTitle(reason.getDescription())
            .setMessage("Enter Comment: ")
            .setView(viewInflated)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    comments = userInputDialogEditText.getText().toString();
                    //move on...
                }
            })
            .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //move on...
                }
            });

    AlertDialog dialog = builder.create();
    dialog.show();

    userInputDialogEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if(actionId== EditorInfo.IME_ACTION_UNSPECIFIED || actionId ==  EditorInfo.IME_ACTION_DONE){
                dialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
            }
            return false;
        }
    });

    userInputDialogEditText.setShowSoftInputOnFocus(false);
}

除了使用setShowSoftInputOnFocus(false)之外,我还尝试使用userInputDialogEditText.setInputType(InputType.TYPE_NULL);以及以下函数:

InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
     imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

输入法管理器(放置在onEditorAction()中)不会改变任何东西,虽然使用setInputType(InputType.TYPE_NULL)确实有效,但它会删除屏幕上 Flink 的位置栏。
我是非常新的Android开发,没有人,我的工作似乎有任何想法,如何使这项工作,所以任何帮助将不胜感激。

fafcakar

fafcakar1#

在找到一个更好的方法来研究我的问题后回答我自己的问题。我个人不喜欢这个答案。最后一个EditText小部件的工作方式与Activity中的其他小部件不同,但通过向对象添加OnKeyListener(),这对我来说没有意义。我可以完全阻止软键盘出现在屏幕上,每点击一次屏幕底部仍然有 *is * Flink 的图标,但软键盘仍然隐藏。

userInputDialogEditText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
        }
        return false;
    }
});

相关问题