Android-клавиатура не исчезнет - PullRequest
1 голос
/ 17 февраля 2012

Итак, у меня есть 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);

НО, то, что он делает, очень быстро закрывается, а затем снова открывает его. Мое предположение, когда вы обычно нажимаете EditText, он открывает keboard, поэтому в этом случае, даже если я закрываю его, он открывает его из-за этого: (

Какое решение? Я попробовал несколько методов, с помощью которых я не даю клавиатуре показывать при нажатии EditText, но мне не удалось, если кто-то может предложить мне конкретный пример того, как это должно быть сделано, я был бы благодарен.

Ответы [ 2 ]

1 голос
/ 05 марта 2014

Все способы скрытия клавиатуры при запуске фрагмента у меня не работали, но это было сделано, так что попробуйте, возможно,

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
1 голос
/ 17 февраля 2012

У меня та же проблема, которую я решил так:

сначала создайте класс 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, например:

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