showSoftInput()
没有为我显示键盘,但toggleSoftInput()
确实如此。我看到一些其他帖子说要在使用模拟器时禁用硬键盘,但我没有使用模拟器。我在没有硬键盘的实际设备上加载我的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);
似乎键盘最初显示但被其他东西隐藏,因为以下工作(但实际上是一个肮脏的解决方法):
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
editText.postDelayed(new Runnable()
{
@Override
public void run()
{
editText.requestFocus();
imm.showSoftInput(editText, 0);
}
}, 100);
在查看logcat时,我怀疑此消息背后的原因隐藏了最初显示的键盘:
在开始输入时隐藏剪贴板对话框:由其他人完成...!
显示键盘+焦点以及是否要隐藏键盘
@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);
}
P.S 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);
调用上述方法将确保在单击视图时保留并捕获焦点。
当设备具有硬(滑出)键盘时,showSoftInput()不起作用
Android show softkeyboard with showSoftInput is not working?
试试这个:
public void showTheKeyboard(Context context, EditText editText){
InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
}
如果这不起作用,请阅读here的教程
public void hideKeyboard() {
myTextView.setFocusable(true);
myTextView.setFocusableInTouchMode(true);
imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0);
}
作品
public void hideKeyboard() {
imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0);
}
什么都不行
因为我正在使用片段,所以先处理imm:
在Fragment中声明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! :-)
菲尔
如果imm的目标视图与editText相同,则ShowSoftInput有效。你可以通过imm.isActive(editText)
或editText.isInputMethodTarget()
查看。
ToggleSoftInput只是切换当前imm目标的键盘。
在editText.requestFocus()
更改焦点后设置imm的目标视图。我认为这两个任务之间存在一些后期处理,因为一个可运行的帖子还不够。我测试了双重帖子,它对我有用。
editText.requestFocus();
editText.post(new Runnable() {
@Override
public void run() {
editText.post(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(editText, 0);
}
}
});
}
});