在片段启动时显示edittext的键盘
当我的片段开始时,我想让我的edittext处于焦点/让用户开始input它。 我可以通过requestFocus()获得焦点,但是我不能让键盘显示出来。
我已经试过这两个:
edit = (EditText) view.findViewById(R.id.search); edit.requestFocus(); InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imgr.showSoftInput(edit, 0);
和
edit = (EditText) view.findViewById(R.id.search); InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imgr.showSoftInput(edit, 0); edit.requestFocus();
如何让键盘显示EditText?
这是否工作?
imgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
你可以试试这个
@Override public void onResume() { super.onResume(); edit.post(new Runnable() { @Override public void run() { edit.requestFocus(); InputMethodManager imgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imgr.showSoftInput(edit, InputMethodManager.SHOW_IMPLICIT); } }); }
由于使用showSoftInput
不适用于所有情况,并尝试了一些在这里提到的解决scheme,如:
if (binding.account.requestFocus()) { getActivity().getWindow() .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); }
我终于使用它的工作 :
if (binding.account.requestFocus()) { ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput( InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY ); }
以来:
binding.account.requestFocus()
只请求EditText
的焦点(不打开键盘)
和
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput( InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY );
是唯一的解决scheme,似乎正常工作,以显示键盘(和投票最多的一个)
祝你好运! 🙂
正如Nilzor所说的那样
imgr.showSoftInput(getView(), InputMethodManager.SHOW_IMPLICIT)
我同意这是一个比google.com软件最好的解决scheme
另一种在片段开始时打开键盘的方法是调用onCreateView
requestFocus()
,并且当且仅当EditText
是可EditText
时才打开键盘。
if(this.editText.requestFocus()) { getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); }
@Override public void onHiddenChanged (boolean hidden) { super.onHiddenChanged(hidden); if(hidden) { hideKeyboard(yourView); } else { toggleKeyboard(yourView); } } public static void toggleKeyboard(View v) { InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); v.requestFocus(); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS); } public static void hideKeyboard(View v) { InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); }
简单地说,使用添加2行就像一个魅力:
如果使用XML
android:focusable="true" android:focusableInTouchMode="true"
其他在Java:
view.setFocusableInTouchMode(true); view.requestFocus();
这篇文章帮助了我
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_edit_name, container); editText = (EditText) view.findViewById(R.id.txt_yourName); editText.requestFocus(); getDialog().getWindow().setSoftInputMode( LayoutParams.SOFT_INPUT_STATE_VISIBLE); return view; }