Скрыть виртуальную клавиатуру в действии, где не найдено никаких операций с клавиатурой

У меня есть вкладка с одним действием на вкладку, и когда я переключаюсь с первой вкладки, на которой отображается только список с поиском (редактирование текста), на вторую вкладку с TextView, программная клавиатура все еще там. Я хочу, чтобы это ушло. Любые предложения о том, как решить эту проблему?


person Amardeepvijay    schedule 03.04.2014    source источник


Ответы (5)


Попробуйте, android:configChanges="orientation|keyboardHidden"

       <activity
            android:name="YourActivityname"
            android:configChanges="orientation|keyboardHidden"
            android:screenOrientation="landscape"
            android:theme="@style/Theme.MyAwesomeTheme" >
        </activity>

другой способ — заставить их спрятаться, как показано ниже.

поместите этот код в свой класс utils, чтобы код был организован.

public static void hideKeyboard(Activity activity) {
        try {
            InputMethodManager inputManager = (InputMethodManager) activity
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus()
                    .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        } catch (Exception e) {
            // Ignore exceptions if any
            Log.e("KeyBoardUtil", e.toString(), e);
        }
    }

И вы можете вызвать этот метод как Utils.hideKeyboard(your activity.this);

person Rethinavel    schedule 03.04.2014

Попробуйте это

public static void hideSoftInput(View _v,Context _c){
    if(_v.getWindowToken() != null){
        InputMethodManager inputManager = (InputMethodManager) _c.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(_v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}
person somerandomusername    schedule 03.04.2014

jusr вставьте этот метод в свой класс, это будет метод касания и скрытие программной клавиатуры

@Override
    public boolean dispatchTouchEvent(MotionEvent event) {

        View v = getCurrentFocus();
        boolean ret = super.dispatchTouchEvent(event);

        if (v instanceof EditText) {
            View w = getCurrentFocus();
            int scrcoords[] = new int[2];
            w.getLocationOnScreen(scrcoords);
            float x = event.getRawX() + w.getLeft() - scrcoords[0];
            float y = event.getRawY() + w.getTop() - scrcoords[1];

            if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) { 

                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
            }
        }
    return ret;
    }

спрячь его

InputMethodManager imm = (InputMethodManager)getSystemService(
      Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
person Bhanu Sharma    schedule 03.04.2014
comment
где вы положили этот метод - person Bhanu Sharma; 03.04.2014
comment
в моем классе я поставил это - person Amardeepvijay; 03.04.2014
comment
на самом деле ваш текст редактирования находится в фокусе всякий раз, когда вы входите в это действие, если вы хотите по умолчанию закрыть его, тогда посмотрите мой отредактированный ответ - person Bhanu Sharma; 03.04.2014
comment
где я вставляю этот код в первое действие, где у меня есть список и текст редактирования... или во второе действие, где я использовал только текстовое представление - person Amardeepvijay; 03.04.2014
comment
вставьте его туда, где вы не хотите использовать мягкую клавиатуру - person Bhanu Sharma; 03.04.2014
comment
но в моем втором действии ... нет редактирования текста, используется только текстовое представление ... так что я делаю для этого оператора (myEditText.getWindowToken (), 0); - person Amardeepvijay; 03.04.2014

Просто попробуйте это всякий раз, когда вы касаетесь полей, отличных от определенных вами, клавиатура исчезнет.

//to hide keyboard
    @Override
    public boolean dispatchTouchEvent(MotionEvent event) {

        View v = getCurrentFocus();
        boolean ret = super.dispatchTouchEvent(event);

        if (v instanceof EditText) {
            View w = getCurrentFocus();
            int scrcoords[] = new int[2];
            w.getLocationOnScreen(scrcoords);
            float x = event.getRawX() + w.getLeft() - scrcoords[0];
            float y = event.getRawY() + w.getTop() - scrcoords[1];

            Log.d("Activity", "Touch event "+event.getRawX()+","+event.getRawY()+" "+x+","+y+" rect "+w.getLeft()+","+w.getTop()+","+w.getRight()+","+w.getBottom()+" coords "+scrcoords[0]+","+scrcoords[1]);
            if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) { 

                InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
            }
        }
    return ret;
    }
person Tushar Narang    schedule 03.04.2014

Однострочный ответ для вас, это сработает

yourtextview.setRawInputType(Configuration.KEYBOARDHIDDEN_YES);
person Tushar Narang    schedule 03.04.2014