Android软键盘不会消失
问题描述:
所以我有一个最初被禁用的EditText。当我按下一个按钮时,它将启用它,并自动打开软键盘。Android软键盘不会消失
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(etToDelete, InputMethodManager.SHOW_FORCED);
在我输入一些文本后,我按EditText,它应该使其再次禁用并隐藏打开的键盘。
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(((EditText)view).getWindowToken(), 0);
但是,它所做的是非常快地关闭,然后重新打开它。我的GUESS是当你通常按下一个EditText它会打开键盘,所以在这种情况下,即使我关闭它,它重新打开它,因为:(
什么是解决方案?我已经尝试了几种方法当我按下EditText时,我停止显示键盘,但是我没有成功,如果有人能够给我一个具体的例子,应该怎么做,我会很感激。
答
我有同样的问题,我解决了:
首先创建一个类KeyBoardManager:
import android.content.Context;
import android.os.Handler;
import android.view.inputmethod.InputMethodManager;
public class KeyBoardManager {
public KeyBoardManager(Context context) {
final Handler handler = new Handler();
final InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
new Thread(new Runnable() {
@Override
public void run() {
while(true){
try{Thread.sleep(100);}catch (Exception e) {}
handler.post(new Runnable() {
@Override
public void run() {
if(!imm.isAcceptingText()){
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
}
}
});
}
}
}).start();
}
}
,并在第一个活动的方法的onCreate创建KeyBoardManager像一个新的实例:对于]
(new Handler()).postDelayed(new Runnable() {
editText.requestFocus();
editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
editText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
}, 200);
答
每一个方法:
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new KeyBoardManager(this);
}
}
,当你的EditText在屏幕上绘制的冷杉一次调用隐藏键盘开始片段没有工作对我来说,当,但是这使得它,所以尝试一下,也许
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
ü可以上传你的代码更简单的听众,让我们可以清楚的发现概率.. – Sniper 2012-02-17 13:44:33