【问题标题】:Android custom dialog class show softkey on startupAndroid 自定义对话框类在启动时显示软键
【发布时间】:2016-09-20 08:29:49
【问题描述】:

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

我必须让它聚焦其编辑文本之一,并在对话框启动时显示软键。

我查看了几个答案,其中包括使用 inputmanager,但运气不佳。

调用对话框的activity默认设置为隐藏软键,在manifest上设置。

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

【问题讨论】:

  • 编辑文本以成为焦点,但您想隐藏小键盘??
  • 在活动中不能显示软键。

标签: android android-softkeyboard


【解决方案1】:

我会建议您在 start_of_the_dialog 上通过引用此 #SOF 答案来关闭键盘。如果它不起作用,只需在处理程序的帮助下添加 100ms 延迟以在对话框开始时关闭键盘。

【讨论】:

    【解决方案2】:
    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); 
    

    【讨论】:

      【解决方案3】:

      先假设:

      通过这种说法:

      调用对话框的activity默认设置为隐藏软键,在manifest上设置。

      是否意味着它有这样的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();
            }
        });
        

      唯一需要注意的是,如果有人需要设置 OnShowListener,它将覆盖您的。

      我从this answer 获得了 show-soft-input sn-p 代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多