即使使用inputmanager也无法隐藏Android软键盘
问题:
我想在按下“添加”按钮时隐藏键盘。 屏幕上有两个EditText
。 键盘不会在开始活动时出现,这很好,但它不会在点击按钮时消失。
以下是Stack Overflow提供的所有可能的问题,我已经看到其答案对我没有帮助:
关闭/隐藏Android软键盘
以编程方式隐藏/显示Android软键盘
活动开始时如何隐藏软键盘
单击EditText外部后如何在android上隐藏软键盘?
和其他许多人。
这是我的代码:
AddActivity
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);
}
}
}
大多数答案都是关于InputManager
方法的,但它不适用于我,也就是说,单击按钮时不隐藏键盘。 这是我使用的InputManager
另一个变体:
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
我也试过这个:
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
);
这也不起作用(键盘不会隐藏在单击按钮上)。
我也试过:
<activity android:name=".AddActivity"
android:label="@string/app_name"
android:parentActivityName=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
和
<activity android:name=".AddActivity"
android:label="@string/app_name"
android:parentActivityName=".MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
</activity>
有了这个,我的应用程序停止工作:
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
这个完全隐藏了键盘(即使点击了editText
,键盘也没有出现):
text1.setInputType(InputType.TYPE_NULL);
text2.setInputType(InputType.TYPE_NULL);
我决定为我的按钮使用onclicklistener
,而不是使用另一个函数,并通过onClick
在AddActivity.xml
调用它。
当我决定再次尝试使用OnCliCkListener
时,我的一半是通过我的问题。 经过几次随机尝试,以下是适用于我的最终代码:
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);
}
});
另一种方法是以如下方式使用OnClickListener
:
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
)
在寻找原因onClick
中, XML
属性不为我工作,而OnClickListener
呢,我发现了以下链接有用:
setOnclickListener vs OnClickListener vs View.OnClickListener
XML中的Android onClick与OnClickListener
android:onClick XML属性与setOnClickListener有什么不同?
OnClick()事件和OnClickListener之间的区别?
现在,在我的答案中,我意识到我在使用XML中的onClick
犯的错误。 以下是我所做的摆脱OnClickListener
的方法:
onClick
的方法中。 在我的情况下,我将hideKeyboard()
的整个代码移到addNewTask
。 关于使用onClick
一些重要观点
该方法应该public
而且void
。
它应该有一个View
参数,比如View V
最后,工作的代码:
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);
}
}
概要
我发现了3种隐藏我的情况的软键盘的方法,使用:
OnClickListener:
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();
}
}
};
setOnClickListener:
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);
}
});
onClick, XML
属性:
public 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);
}
}
看一下这个
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
关闭/隐藏Android软键盘
链接地址: http://www.djcxy.com/p/93329.html上一篇: Cannot hide Android soft keyboard even with inputmanager