我有一个EditText
和按钮与父母的底部对齐。
当我在其中输入文字并按下按钮保存数据时,虚拟键盘不会消失。
任何人都可以指导我如何隐藏键盘吗?
答案 0 :(得分:115)
您可能还想在EditText中定义imeOptions。这样,按下完成后键盘就会消失:
<EditText
android:id="@+id/editText1"
android:inputType="text"
android:imeOptions="actionDone"/>
答案 1 :(得分:112)
这应该有用。
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
请确保this.getCurrentFocus()不返回null,如果没有焦点则会返回。
答案 2 :(得分:19)
mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// do something, e.g. 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"
答案 3 :(得分:10)
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
答案 4 :(得分:4)
EditText actionlistener中包含的解决方案:
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;
}
});
...
...
}
答案 5 :(得分:4)
我没有看到有人使用这种方法:
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();
答案 6 :(得分:2)
我发现这是因为我的EditText在输入时没有自动被解雇。
这是我的原始代码。
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;
用户按下后进行操作。
希望这有助于某人。
答案 7 :(得分:1)
过去几天一直在努力解决这个问题,并找到了一个非常有效的解决方案。在EditText外的任何地方进行触摸时,隐藏软键盘。
答案 8 :(得分:1)
只需记下这两行代码,其中输入选项将起作用。
InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
答案 9 :(得分:0)
我使用此方法从编辑文本中删除键盘:
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);
}
}
}
答案 10 :(得分:0)
您可以在顶部看到明确的答案。但我使用ArrayList<HashMap<String, HashMap<Integer, ArrayList<Integer>>>>();
并且运作良好。我发布了这个答案,因为我无法在我的oncreatedialog中输入Item {
states: [
State {
name: "s1"
},
State {
name: "s2"
},
State {
name: "s3"
}
]
transitions: [
Transition {
from: "s2"; to: "s1"
ScriptAction {
script: doSomething()
}
},
Transition {
from: "s3"; to: "s1"
ScriptAction {
script: doSomethingElse()
}
}
]
}
。
所以这是我的答案。如果你尝试过标记答案但没有奏效,你可以试试这个:
getDialog().getCurrentFocus()
答案 11 :(得分:0)
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);
}
}
如果您有anather EditText字段,则需要关注焦点更改
答案 12 :(得分:0)
您可以像这样轻松地为呼叫创建单例类:
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);
}
}
答案 13 :(得分:0)
对于我来说,为了在按下“发送按钮”时隐藏键盘,我使用了可接受的答案,但将上下文更改为getApplication并添加了getWindow()。
#include<stdio.h>
int main()
{
float no =2.34;
int count =0;
while(no!=((int)no))
{
count++;
no=no*10;
}
printf("\t %d \n",count);
return 0;
}
答案 14 :(得分:-2)
editText.setInputType(InputType.TYPE_NULL);