如何在EditText上隐藏Android软键盘

我有一个活动与一些EditText字段和一些button,通常会用于填充这些字段的便利。 但是,当我们用户触摸EditText字段之一时,Android软键盘会自动出现。 我希望它默认保持隐藏, 除非用户长按菜单button。 我有一个解决scheme,find了几个答案,但到目前为止,我不能让他们的工作。

我已经尝试了以下内容:

1 – 在onCreate方法中,

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

2 – 在onCreate方法中,

 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 

3 – 并在清单文件中,

 <activity android:name=".activityName" android:windowSoftInputMode="stateAlwaysHidden"/> 

这些方法都不起作用。 每当用户点击EditText字段,就会出现软键盘。 我只想要软键盘出现,如果用户明确显示长期按菜单键。

为什么这不起作用?

这将帮助你

 editText.setInputType(InputType.TYPE_NULL); 

编辑:

要显示软键盘,您必须在long key press event of menu button编写以下代码

 editText.setInputType(InputType.TYPE_CLASS_TEXT); editText.requestFocus(); InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

你需要添加清单。 您的清单文件将如下所示:

 <activity ... android:windowSoftInputMode="stateHidden|adjustResize" ... > 

我有时候会用一些技巧来做到这一点。 我在布局的顶部放置了一个隐形的焦点支架。 这将是这样的

  <EditText android:id="@id/editInvisibleFocusHolder" style="@style/InvisibleFocusHolder"/> 

与这种风格

 <style name="InvisibleFocusHolder"> <item name="android:layout_width">0dp</item> <item name="android:layout_height">0dp</item> <item name="android:focusable">true</item> <item name="android:focusableInTouchMode">true</item> <item name="android:inputType">none</item> </style> 

然后在onResume我会打电话

  editInvisibleFocusHolder.setInputType(InputType.TYPE_NULL); editInvisibleFocusHolder.requestFocus(); 

这对我来说很好,从1.6到4.x

经过很长时间的研究TextView类,我发现了一种方法来防止键盘出现。 这个技巧是在它出现之后隐藏起来的,所以我search了一个键盘出现后调用的方法并隐藏它。

实现了EditText类

 public class NoImeEditText extends EditText { public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); } /** * This method is called before keyboard appears when text is selected. * So just hide the keyboard * @return */ @Override public boolean onCheckIsTextEditor() { hideKeyboard(); return super.onCheckIsTextEditor(); } /** * This methdod is called when text selection is changed, so hide keyboard to prevent it to appear * @param selStart * @param selEnd */ @Override protected void onSelectionChanged(int selStart, int selEnd) { super.onSelectionChanged(selStart, selEnd); hideKeyboard(); } private void hideKeyboard(){ InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindowToken(), 0); } } 

和风格

 <com.my.app.CustomViews.NoImeEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:editable="false" android:background="@null" android:textSize="@dimen/cell_text" /> 

即使我将EditorInfo.TYPE_NULL设置为视图,软键盘仍然不断上升。 除了我从nik431的回答中得到的想法之外,没有任何答案适用于我。

 editText.setCursorVisible(false); editText.setFocusableInTouchMode(false); editText.setFocusable(false); 

让我们尝试在EditText的xml中设置下面的属性

 android:focusableInTouchMode="true" android:cursorVisible="false". 

如果你想在发射活动中隐藏softkeypad,请通过这个链接

下面一行就是正在查找的内容。 此方法已包含在API 21 ,因此适用于API 21及更高版本。

 edittext.setShowSoftInputOnFocus(false); 
 weekText = (EditText) layout.findViewById(R.id.weekEditText); weekText.setInputType(InputType.TYPE_NULL); 

似乎有相当多的方法来防止系统键盘出现,无论是编程方式和XML。 但是,这是支持预先API 11设备的方式。

 // prevent system keyboard from appearing if (android.os.Build.VERSION.SDK_INT >= 11) { editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true); } else { editText.setRawInputType(InputType.TYPE_NULL); editText.setFocusable(true); }