AlertDialog EditText 不显示软键盘

问题描述 投票:0回答:5

当我单击 TextInputEditText 时,是 a

LinearLayout
以编程方式添加到
AlertDialog
的父级,我的键盘不显示(在多个设备上测试)

首先,我创建一个新的

LinearLayout
并向其添加一个新的
Spinner
。 选择微调器上的最后一个项目后,我从
LinearLayout
中删除微调器并添加
TextInputEditText
:

layout.removeAllViews();
layout.addView(input);

当我点击

TextInputEditText
时,它会聚焦,但没有弹出软键盘


但是如果我将

TextInputEditText
直接添加为
View
AlertDialog
,键盘会弹出并正确显示。


我的

AndroidManifest.xml
没有特殊条目。


我的完整代码:

private void dialogAddContact() {

    ArrayList<String> mails = new ArrayList<>();

    final LinearLayout layout = new LinearLayout(this);
    final TextInputEditText input = new TextInputEditText(this);
    final Spinner sp = new Spinner(this);

    layout.addView(sp);
    layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

    input.setInputType(InputType.TYPE_CLASS_TEXT);
    input.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    [....]

    final ArrayAdapter<String> adp = new ArrayAdapter<>([....]);

    sp.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    sp.setAdapter(adp);
    sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d(Tools.LOGTAG, position + " " + totalMails);
            if(position == totalMails - 1){

                /****** Here i remove the spinner and add the input ****/

                layout.removeAllViews();
                layout.addView(input);
            }
        }
        [....]
    });

    final AlertDialog.Builder builder = new AlertDialog.Builder(this)
            .setView(layout, 50, 0, 50, 0)
            [....]
            });

    dialog = builder.create();
    dialog.show();
}
android android-layout layout keyboard
5个回答
3
投票

#. 将焦点更改侦听器添加到

TextInputEditText
并在
onFocusChange()
中使用
.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
显示键盘。

需要打开键盘:

final TextInputEditText input = new TextInputEditText(this);

// Keyboard
final InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);

// Auto show keyboard
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean isFocused) {

        if (isFocused) {
            imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        } 
    }
});

#. 当按下对话框的

hide
时,使用以下代码来
button
键盘。

需要隐藏键盘:

// Hide keyboard
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);

希望对你有帮助~


2
投票

我遇到了同样的问题,但任何给定的解决方案都不起作用,然后我使用它的父类(即

Dialog
)而不是
AlertDialog
。这对我有用。


0
投票

如果您想在对话框打开时显示键盘,您可以在

dialog.show()
之后添加此内容:

InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

0
投票

此代码对我有用。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);

0
投票

唯一对我有用的是使用简单的对话框而不是 AlertDialog...

© www.soinside.com 2019 - 2024. All rights reserved.