Cannot hide Android soft keyboard even with inputmanager
问题:
I want to hide the keyboard when the button"Add" is pressed. There are two
EditText on the screen. The keyboard doesn't appear at starting the activity, which is good, but it doesn't go away on clicking button.
以下是Stack Overflow的所有可能的问题,我看到他的答案对我没有帮助:
关闭/隐藏Android软键盘
以编程方式隐藏/显示Android软键盘
活动开始时如何隐藏软键盘
如何在EditText外单击后在android上隐藏软键盘?
和许多其他人。
这是我的代码:
AddActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class AddActivity extends ActionBarActivity { EditText text1,text2; DbHelper db; ListView l; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); db = new DbHelper(this); l = (ListView) findViewById(R.id.listInAddActivity); text1 = (EditText) findViewById(R.id.i1); text2 = (EditText) findViewById(R.id.i2); // text1.setInputType(InputType.TYPE_NULL); // text2.setInputType(InputType.TYPE_NULL); hideKeyboard(); loadDataInAdd(); } public void addNewTask(View view) { String s1 = text1.getText().toString(); String s2 = text2.getText().toString(); db.addData(s1,s2); loadDataInAdd(); hideKeyboard(); } public void loadDataInAdd() { try { Cursor cursor = db.fetchData(); ListAdapter myAdapter = new SimpleCursorAdapter(this, R.layout.tasks, cursor, new String[]{db._ID, db.COLUMN_1, db.COLUMN_2}, new int[]{R.id.idnum, R.id.c1, R.id.c2}, 0); l.setAdapter(myAdapter); } catch(NullPointerException e) { e.printStackTrace(); } // MainActivity.loadData(); } private void hideKeyboard() { // Check if no view has focus: View view = this.getCurrentFocus(); if (view != null) { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } } |
大多数答案都是关于
1 2 3 4 | View view = this.getCurrentFocus(); if (view != null) { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); |
我也试过这个:
1 2 3 | getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN ); |
这也不起作用(键盘没有隐藏在点击按钮上)。
我也尝试过:
1 2 3 4 5 6 | <activity android:name=".AddActivity" android:label="@string/app_name" android:parentActivityName=".MainActivity" android:windowSoftInputMode="stateAlwaysHidden"> </activity> |
和
1 2 3 4 5 6 | <activity android:name=".AddActivity" android:label="@string/app_name" android:parentActivityName=".MainActivity" android:windowSoftInputMode="stateAlwaysHidden"> </activity> |
有了这个,我的应用程序停止工作:
1 2 3 4 5 | InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); |
这个完全隐藏了键盘(即使单击
1 2 | text1.setInputType(InputType.TYPE_NULL); text2.setInputType(InputType.TYPE_NULL); |
我决定使用
当我决定再次尝试使用
1 2 3 4 5 6 7 8 9 10 11 | btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } }); |
另一种方法是以下列方式使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private View.OnClickListener mListener = new View.OnClickListener() { public void onClick(View v) { // do something when the button is clicked //public void onClick(View v) { try { InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); } catch (Exception e) { e.printStackTrace(); } } }; |
像我这样的初学者的重点:
-
上面的代码应该放在
protected void onCreate(Bundle savedInstanceState) 之前 -
要调用上述内容,请将此代码放在
protected void onCreate(Bundle savedInstanceState) 中:btn.setOnClickListener(mListener);
-
在两种方法中使用
try-catch 进行异常处理(onclicklistener ,setOnClickListener )
在搜索
setOnclickListener vs OnClickListener vs View.OnClickListener
Android onClick in XML vs. OnClickListener
android:onClick XML属性与setOnClickListener有何不同?
OnClick()事件和OnClickListener之间的区别?
现在,在我的回答中,我意识到我在使用XML中的
-
首先,我将隐藏键盘的代码部分移动到
onClick 中的方法中。在我的例子中,我将hideKeyboard() 中的整个代码移动到addNewTask 。
关于使用
-
该方法应为
public 和void 。 -
它应该采用
View 参数,例如View V 。
最后,有效的代码:
1 2 3 4 5 6 7 8 9 10 11 | public void addNewTask(View view) { String s1 = text1.getText().toString(); String s2 = text2.getText().toString(); db.addData(s1, s2); loadDataInAdd(); // hideKeyboard(); below is the code to hide keyboard if (view != null) { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } } |
摘要
我找到了三种隐藏软键盘的方法,使用:
-
OnClickListener:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17private View.OnClickListener mListener = new View.OnClickListener() {
public void onClick(View v) {
// do something when the button is clicked
//public void onClick(View v) {
try {
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
catch (Exception e) {
e.printStackTrace();
}
}
}; -
setOnClickListener:
1
2
3
4
5
6
7
8
9
10
11btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}); -
onClick,
XML 属性:1
2
3
4
5
6
7
8
9
10
11public void addNewTask(View view) {
String s1 = text1.getText().toString();
String s2 = text2.getText().toString();
db.addData(s1, s2);
loadDataInAdd();
// hideKeyboard();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
看一下这个
1 2 3 4 5 | View view = this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } |
关闭/隐藏Android软键盘