android softkeyboard showSoftInput vs toggleSoftInput

showSoftInput()不显示我的键盘,但toggleSoftInput() 。 我看到一些其他post,说使用模拟器时禁用硬键盘,但我没有使用模拟器。 我在没有硬键盘的实际设备上加载我的APK。 两种方法都不行吗? 为什么showSoftInput()工作? 我想明确地将键盘与特定的文本字段相关联。

不起作用:

 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); editText.setText("textchange"); //i see the text field update imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

作品:

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

Solutions Collecting From Web of "android softkeyboard showSoftInput vs toggleSoftInput"

看起来,键盘最初显示,但被其他东西隐藏,因为下面的工作(但实际上是一个肮脏的变通):

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

而当看着logcat我怀疑这个消息背后的原因隐藏最初显示的键盘:

在开始input时隐藏剪贴板对话框:由别人完成…!

显示键盘+焦点,还可以隐藏键盘

 @Override public void onResume () { super.onResume(); inputSearch.setFocusableInTouchMode(true); inputSearch.requestFocus(); // Show Keyboard InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService( Context.INPUT_METHOD_SERVICE); imm.showSoftInput(inputSearch, InputMethodManager.SHOW_IMPLICIT); } 

PS inputSearch =(EditText)getSherlockActivity()。findViewById(R.id.inputSearch);

  // Hide Keyboard InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); 

这个问题的确切答案为什么showSoftInput不工作,toggleSoftInput呢?

是你试图显示键盘的视图没有焦点。 所以要解决这个问题并使用showSoftInput方法,你必须在视图中调用以下方法:

  setFocusable(true); setFocusableInTouchMode(true); 

调用上述方法将确保当您单击View时保留并捕获焦点。

当设备有一个硬(滑出)键盘时,showSoftInput()不起作用

Android show softboard与showSoftInput不工作?

尝试这个:

 public void showTheKeyboard(Context context, EditText editText){ InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); } 

如果这不起作用,请阅读这里的教程

 public void hideKeyboard() { myTextView.setFocusable(true); myTextView.setFocusableInTouchMode(true); imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); } 

作品

 public void hideKeyboard() { imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); } 

不工作

因为我正在使用片段,所以imm先处理,所以:

在片段中声明imm

 private InputMethodManager imm; 

然后在片段中添加:

 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); } 

他说,经过3到4个小时的研究和失败!

感谢user_CC! 🙂

菲尔