在android中inputEditText后如何隐藏键盘?

我有一个EditText和buttonalignment到父母的底部。

当我在其中input文本并按下button保存数据时,虚拟键盘不会消失。

任何人都可以指导我如何隐藏键盘?

这应该工作。

 InputMethodManager inputManager = (InputMethodManager) context. getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow( this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

只要确保this.getCurrentFocus()不返回null,如果没有焦点,就会返回null。

您可能还想要在EditText中定义imeOptions。 这样,一旦按下完成键盘就会消失:

 <EditText android:id="@+id/editText1" android:inputType="text" android:imeOptions="actionDone"/> 
 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
  mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { // do something, eg set your TextView here via .setText() InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(v.getWindowToken(), 0); return true; } return false; } }); 

并在XML中

  android:imeOptions="actionDone" 

包含在EditText动作侦听器中的解决scheme:

 public void onCreate(Bundle savedInstanceState) { ... ... edittext = (EditText) findViewById(R.id.EditText01); edittext.setOnEditorActionListener(new OnEditorActionListener() { public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); } return false; } }); ... ... } 

我发现这是因为我的EditText在input时不会被自动解除。

这是我的原始代码。

 editText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) { // Do stuff when user presses enter return true; } return false; } }); 

我通过删除线来解决它

 return true; 

当用户按下input后做东西。

希望这有助于某人。

过去几天一直在努力,发现了一个很好的解决scheme。 当在EditText外部的任何地方进行触摸时,软键盘被隐藏。

代码发布在这里: 在Android中点击隐藏默认键盘

我使用这种方法从编辑文本中删除键盘:

  public static void hideKeyboard(Activity activity, IBinder binder) { if (activity != null) { InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (binder != null && inputManager != null) { inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS inputManager.showSoftInputFromInputMethod(binder, 0); } } } 

而这种方法从活动中删除键盘(在某些情况下不工作 – 例如,当编辑文本,这是键盘绑定,失去焦点,它将无法正常工作。但其他情况下,它的工作原理,你没有关心拿着键盘的元素)

  public static void hideKeyboard(Activity activity) { if (activity != null) { InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (activity.getCurrentFocus() != null && inputManager != null) { inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0); } } } 
 editText.setInputType(InputType.TYPE_NULL); 

您可以在顶部看到明显的答案。 但我使用getDialog().getCurrentFocus()并运行良好。 我发布这个答案,因为我不能在我的oncreatedialog中键入"this"

所以这是我的答案。 如果你尝试了明显的答案,但没有成功,你可以简单地试试这个:

 InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

我没有看到有人使用这种方法:

 editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean focused) { InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); if (focused) keyboard.showSoftInput(editText, 0); else keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0); } }); 

然后只需要把重点放在editText上:

 editText.requestFocus(); 
 int klavStat = 1; // for keyboard soft/hide button int inType; // to remeber your default keybort Type 

编辑器 – 是EditText字段

 /// metod for onclick button /// public void keyboard(View view) { if (klavStat == 1) { klavStat = 0; inType = editor.getInputType(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS); editor.setInputType(InputType.TYPE_NULL); editor.setTextIsSelectable(true); } else { klavStat = 1; InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); editor.setInputType(inType); } } 

如果你有一个EditText字段,你需要注意焦点的改变

你可以像这样轻松创build一个单例类:

 public class KeyboardUtils { private static KeyboardUtils instance; private InputMethodManager inputMethodManager; private KeyboardUtils() { } public static KeyboardUtils getInstance() { if (instance == null) instance = new KeyboardUtils(); return instance; } private InputMethodManager getInputMethodManager() { if (inputMethodManager == null) inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE); return inputMethodManager; } @SuppressWarnings("ConstantConditions") public void hide(final Activity activity) { new Handler().post(new Runnable() { @Override public void run() { try { getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); } catch (NullPointerException e) { e.printStackTrace(); } } }); } } 

那么,在活动之后可以怎样调用下一个表格:

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity); KeyboardUtils.getInstance().hide(this); } }