按下返回键时隐藏软键盘
Posted
技术标签:
【中文标题】按下返回键时隐藏软键盘【英文标题】:Hide Soft keyboard on return key press 【发布时间】:2014-12-26 00:49:49 【问题描述】:我在 SO 上搜索了六个其他答案,但没有找到一个有效的答案。我要做的就是在用户按下回车按钮时关闭软键盘。 (相当于极其简单的 ios 'resignKeyboard' 调用。)在下面的代码中,不会调用 onEditorAction 方法。我在我的 XML 文件中设置了一个 EditText 视图,我的片段中的代码如下:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
fragView = inflater.inflate(R.layout.fragment_encrypt2, container, false);
textField = (EditText) fragView.findViewById(R.id.textField);
textField.setOnEditorActionListener(new TextView.OnEditorActionListener()
@Override
public boolean onEditorAction(TextView arg0, int actionId,
KeyEvent arg2)
// hide the keyboard and search the web when the enter key
// button is pressed
if (actionId == EditorInfo.IME_ACTION_GO
|| actionId == EditorInfo.IME_ACTION_DONE
|| actionId == EditorInfo.IME_ACTION_NEXT
|| actionId == EditorInfo.IME_ACTION_SEND
|| actionId == EditorInfo.IME_ACTION_SEARCH
|| (arg2.getAction() == KeyEvent.KEYCODE_ENTER))
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(textField.getWindowToken(), 0);
return true;
return false;
);
// Inflate the layout for this fragment
return fragView;//inflater.inflate(R.layout.fragment_encrypt2, container, false);
以下是我定义 EditText 字段的 XML 文件中的 sn-p。我需要 EditText 是多行的。
<EditText
android:id="@+id/textField"
android:layout_
android:layout_
android:hint="@string/Encrypted_Text_Hint"
android:gravity="top"
android:inputType="textMultiLine"
android:imeOptions="actionDone"/>
【问题讨论】:
你没有在EditText
上设置任何imeOptions
,在这种情况下return被认为是另一个输入字符。
我已经设置了imeOptions,但是我需要EditText是多行的
【参考方案1】:
如果您不想要多行,则可以为您 edittext 指定单行。对于edittext,您也可以像这样将imeOptions设置为Done:
<EditText
android:id="@+id/edittext_done"
android:layout_
android:layout_
android:imeOptions="actionDone"
android:singleLine="true"
/>
我显然不知道你是否正在努力实现这一目标。任何方式看看。
编辑: android:singleLine 自 API 3 以来由于性能不佳而被弃用,您必须改用 android:maxLines。 singleLine 将可用,因为即使是现在,android:maxLines 属性也不支持某些效果。
【讨论】:
删除最后一个属性'singleLine',然后运行它 我设置为多行 Multiline 和 android:imeOptions="actionDone" 似乎不能同时工作【参考方案2】:我通过更改 XML 文件中的以下内容解决了这个问题:
android:inputType="textMultiLine"
到:
android:inputType="textImeMultiLine"
【讨论】:
关闭!这会将焦点移至布局中的下一项,但不会关闭软键盘。【参考方案3】:下面的代码对我有用。
在 XML 中:
android:imeOptions="actionDone"
android:inputType="textCapWords"
在 JAVA 类中:
edit_text.setOnEditorActionListener(new OnEditorActionListener()
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
// TODO Auto-generated method stub
if ((actionId==EditorInfo.IME_ACTION_DONE ) )
//Toast.makeText(getActivity(), "call",45).show();
// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
//or try following:
//InputMethodManager imm = (InputMethodManager)getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(auto_data.getWindowToken(), 0);
return true;
return false;
);
【讨论】:
【参考方案4】:根据我的测试,当用户单击回车按钮时,关闭软键盘真正需要什么,只需将以下代码添加到 xml 中的 EditText 即可实现。
android:imeOptions="actionDone"
android:inputType="textImeMultiLine"
不需要 OnEditorActionListener 或任何其他 Java 代码。
【讨论】:
【参考方案5】:已接受的答案已弃用:
<EditText
android:id="@+id/edittext_done"
android:layout_
android:layout_
android:imeOptions="actionDone"
android:singleLine="true"
/>
试试这个:
<EditText
android:id="@+id/edittext_done"
android:layout_
android:layout_
android:imeOptions="actionDone"
android:maxLines="1"
/>
【讨论】:
【参考方案6】:EditText.xml
<EditText
android:id="@+id/edit_text_searh_home"
android:layout_
android:layout_
android:padding="4dp"
android:singleLine="true"
android:lines="1"
android:hint="Ingresa palabras claves"
android:imeActionLabel="Search"
android:background="@drawable/rounded_edit_text_search"
android:drawableRight="@android:drawable/ic_menu_search"/>
片段.java
final EditText edit_text_searh = (EditText) v.findViewById(R.id.edit_text_searh_home);
edit_text_searh.setOnEditorActionListener(new TextView.OnEditorActionListener()
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit_text_searh.getWindowToken(), 0);
Toast.makeText(getContext(),edit_text_searh.getText(),Toast.LENGTH_SHORT).show();
return true;
);
【讨论】:
【参考方案7】:这可能是你可以像这样向你的 EditText 添加一个属性:
android:imeOptions="actionSearch"
【讨论】:
即使有这个选项,仍然没有调用 actionListener【参考方案8】:试试这个方法,或许能解决你的问题。
protected void showKeyboard()
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (activity.getCurrentFocus() == null)
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
else
View view = activity.getCurrentFocus();
inputMethodManager.showSoftInput(view,InputMethodManager.SHOW_FORCED);
/**
* Hide keyboard.
*/
protected void hideKeyboard()
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
View view = activity.getCurrentFocus();
if (view == null)
if (inputMethodManager.isAcceptingText())
inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
else
if (view instanceof EditText)
((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug
inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
【讨论】:
问题是actionListener没有被调用,所以我什至不能调用这些方法【参考方案9】:这对我有用。基于这个布局xml:
<com.google.android.material.textfield.TextInputLayout
android:layout_
android:layout_>
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/ip_override_text_input_sat"
android:layout_
android:layout_
android:layout_gravity="end"
android:hint="IP Address" />
</com.google.android.material.textfield.TextInputLayout>
我需要这样做以使键盘关闭,文本输入以失去焦点并隐藏光标。
findViewById<TextView>(R.id.ip_override_text_input_sat).setOnKeyListener v, keyCode, event ->
if (keyCode == KeyEvent.KEYCODE_ENTER && currentFocus != null)
val inputManager =
getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
inputManager.hideSoftInputFromWindow(
this.currentFocus!!.windowToken,
HIDE_NOT_ALWAYS
)
currentFocus!!.clearFocus()
return@setOnKeyListener true
return@setOnKeyListener false
希望这有助于有人做同样的事情
【讨论】:
以上是关于按下返回键时隐藏软键盘的主要内容,如果未能解决你的问题,请参考以下文章
android中如何点击一个按钮时隐藏软键盘,(不是点击空白处隐藏软键盘)