我试图在屏幕上弹出一个软键盘,首先以编程方式加载(不更改 list 中的 windowSoftInputMode)。
有趣的是在屏幕上首次加载时,它根本不起作用。这是代码块。
mEDT.requestFocus();
mEDT.requestFocusFromTouch();
mImm.showSoftInput(mEDT, InputMethodManager.SHOW_IMPLICIT);
showSoftInput 返回false,导致软键盘没有显示。
但是当我点击 EditText 时。 showSoftInput 返回 true 并显示软键盘。
谁能给我解释一下发生了什么?
最佳答案
您在使用 Fragments 吗?我发现 showSoftInput()
在 fragment 中不可靠。
查看源码后,发现在onCreate()
/onCreateView()
或onResume中调用
不会立即使对象获得焦点。这很可能是因为尚未创建内容 View 。因此焦点发生在 Activity 或 Fragment 初始化期间的某个时间。requestFocus()
()
我在 onViewCreated()
中调用 showSoftInput()
获得了更多成功。
public class MyFragment extends Fragment {
private InputMethodManager inputMethodManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
EditText text1 = (EditText) view.findViewById(R.id.text1);
text1.requestFocus();
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(view.findFocus(), InputMethodManager.SHOW_IMPLICIT);
super.onViewCreated(view, savedInstanceState);
}
}
即使您不使用 fragment ,我敢打赌同样的规则也适用。因此,请确保在调用 showSoftInput() 之前创建了 View 。
关于android - InputMethodManager.showSoftInput 为何或何时返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35028676/