Android自定义对话框类在启动时显示软键

时间:2016-09-19 23:07:19

标签: android android-softkeyboard

我有一个扩展对话框类的自定义对话框。

我必须让它关注其中一个edittext并在启动对话框时显示该软键。

我已经看了几个答案,其中包括使用inputmanager,但没有那么多运气。

调用对话框的活动设置为默认隐藏软键,该软键在清单上设置。

在这种情况下,我该怎么办?

3 个答案:

答案 0 :(得分:1)

我会建议您在start_of_the_dialog上关闭键盘,方法是重新输入#SOF个答案。如果它不起作用只需在处理程序的帮助下添加100毫秒延迟,以在对话框的开始关闭键盘。

答案 1 :(得分:0)

首先假设:

通过这个声明:

  

调用对话框的活动设置为默认隐藏软键,该软键在清单上设置。

这是否意味着它具有这样的windowSoftInputMode属性?

<activity
android:name=".MainActivity"
...
android:windowSoftInputMode="stateHidden">
...
</activity>

一种方法是在对话框的创建上设置OnShowListener

  1. class-that-extends-Dialog 类上,您可以创建一个OnStateListener并在构造函数上声明它,如下所示:

    public class MyDialog extends Dialog {
    
        public MyDialog(final Context context) {
            super(context);
            setContentView(R.layout.dialog_mydialog);
            setOnShowListener(new OnShowListener() {
                @Override
                public void onShow(DialogInterface dialogInterface) {
                    displayKeyboard(context);
                }
            });
        }
    
        private void displayKeyboard(Context context) {
            View view = findViewById(R.id.et_dialog_field);
            InputMethodManager inputMethodManager =
                    (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.toggleSoftInputFromWindow(
                    view.getApplicationWindowToken(),
                    InputMethodManager.SHOW_FORCED, 0);
        }
    }
    
  2. 在活动中我假设你有类似的东西:

    mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            MyDialog dialog = new MyDialog(MainActivity.this);
            dialog.show();
        }
    });
    
  3. 唯一需要注意的是,如果有人要求设置OnShowListener,它会覆盖你的。{/ p>

    我从this answer获得了 show-soft-input 代码片段。

答案 2 :(得分:0)

ediText.postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                InputMethodManager inputMethodManager = (InputMethodManager)
                getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        },100);