Android软键盘不会消失

时间:2012-02-17 13:37:56

标签: android keyboard android-edittext

所以我有一个最初被禁用的EditText。当我按下按钮启用它时,会自动打开软键盘。

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);

但它的作用很快就会关闭,然后重新打开它。 MY GUESS是你通常按下EditText它打开keboard,所以在这种情况下,即使我关闭它,它也会重新打开它:(

解决方案是什么?我已经尝试了几种方法,当按下EditText时我停止显示键盘,但是我没有成功,如果有人能给我一个具体的例子说明应该如何制作,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题:

首先创建一个类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 of first activity中创建一个新的KeyBoardManager实例,如:

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);
    }
}

当你的编辑文字在第一时间在屏幕上绘制时,你打电话:]

(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);

答案 1 :(得分:1)

启动片段时隐藏键盘的每一种方法对我来说都不起作用,但是这样做了,所以试试吧

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);