软键盘不弹出问题

时间:2021-08-26 00:32:09

问题 :

系统函数

public boolean showSoftInput(View view, int flags);

 

第一个参数表示当前要接收软键盘输入的View,第二个参数是软键盘显示时的控制参数。

 
public void toggleSoftInput(int showFlags, int hideFlags);

 

它同样有两个参数,第一个参数是显示软键盘时使用的标记,第二个参数是隐藏软键盘时使用的标记。

(该方法来在显示和隐藏软键盘之间切换,也就是说,如果当前软键盘是隐藏的,那么执行toggleSoftInput方法时会显示软键盘,如果当前软键盘是显示的,那么执行toggleSoftInput方法时会隐藏软键盘。)

 

but, sometimes ,It  dosn't work!

 

原因:当前布局必须已经完成加载,如果还未绘制完成,则showSoftInput()方法不起作用。特别的,在Activity的onCreate()中执行showSoftInput()是不起作用的。如果要再布局文件加载后就显示软键盘,可以通过postDelayed的方式来延迟执行showSoftInput()。延迟时间不能太短,一般要在50ms以上。

解决:It seems that the keyboard is initially displayed but hidden by something else

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
editText.postDelayed(new Runnable()
{
@Override
public void run()
{
editText.requestFocus();
imm.showSoftInput(editText, 0);
}
}, 100);

 or

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