【问题标题】: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。
-
在您的 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);
}
}
-
关于活动,我假设你有类似的东西:
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 代码。