android edittext单击button后删除焦点

我有一个EditText和一个button的活动。 当用户点击EditText时,键盘显示,他可以input一些文本 – 罚款。 但是当用户点击button时,我希望EditText不再处于焦点状态,即键盘隐藏直到用户再次点击EditText。

点击button后,我可以做些什么来“隐藏EditText的焦点”。 一些代码,我可以添加button的OnClick方法来做到这一点?

编辑:

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <EditText android:id="@+id/edt_SearchDest" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="0.8" android:textSize="18sp" android:hint="Enter your look-up here.." /> <Button android:id="@+id/btn_SearchDest" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="0.2" android:text="Search" /> </LinearLayout> 

最好的祝福

把这个放在你的button监听器中:

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

编辑

上面的解决scheme将打破你的应用程序,如果没有EditText的重点。 像这样修改你的代码:

添加这个方法给你类:

 public static void hideSoftKeyboard (Activity activity, View view) { InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0); } 

然后,在你的button侦听器中,调用像这样的方法:

 hideSoftKeyboard(MainActivity.this, v); // MainActivity is the name of the class and v is the View parameter used in the button listener method onClick. 

我已经在onClickbutton代码中成功使用了以下内容:

 editText.setEnabled(false); editText.setEnabled(true); 

比其他方法稍微复杂…

在您的edittext尝试使用clearFocus时,创build一个假视图以获得焦点:

 <EditText android:id="@+id/edt_thief" android:layout_width="0dp" android:layout_height="0dp" android:focusable="true" android:focusableInTouchMode="true" 

注意这个视图在布局中不需要任何空间,所以它与布局无关。

在控制类中,调用这个:

 public void clearFocus(){ yourEdittext.clearFocus(); edtThief.requestFocus(); } 

关于键盘,在edtThief关注之后,请确实隐藏键盘。

  public static void hideKeyboard(final View view) { InputMethodManager imm = (InputMethodManager) view.getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } 

我能find的最优雅的解决scheme是:

你可以把这个方法保存在你的工具类中:

 public static void hideSoftKeyboard(Activity activity) { if (activity == null) return; if (activity.getCurrentFocus() == null) return; InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); } 

通过简单地调用hideSoftKeyboad()方法,它将隐藏键盘,但正如你所看到的,焦点将仍然存在。

为了消除焦点,我们将使用一个简单的技巧。 在input控件上方,添加一个如下所示的虚拟视图:

 <View android:id="@+id/dummy" android:layout_width="1dp" android:layout_height="1dp" android:focusable="true" android:focusableInTouchMode="true" /> 

然后,在调用焦点隐藏方法的地方写下这行代码:

  theTextView.clearFocus(); 

由于应用程序需要将焦点传递给下一个控件,因此将传递给我们的不可见视图。

 private void hideDefaultKeyboard() { activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);//u have got lot of methods here } 

编辑:

 LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN 
 mTextView.setEnabled(!mTextView.isEnabled()); mTextView.setEnabled(!mTextView.isEnabled()); 

很抱歉,答案迟了,但我希望这将是正确的答案,因为我使用固定

 try { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); if (v != null) { imm.hideSoftInputFromWindow(v.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); } } catch (Exception ignored) { } mEditText.setSelected(false); mEditText.setFocusable(false); mEditText.setFocusableInTouchMode(true); 

在button上点击下面的代码片段。

为什么不只是禁用Button代码中的EditText? 这应该摆脱键盘和焦点。

edt_SearchDest.setEnabled(假);