У меня есть вкладка с одним действием на вкладку, и когда я переключаюсь с первой вкладки, на которой отображается только список с поиском (редактирование текста), на вторую вкладку с TextView, программная клавиатура все еще там. Я хочу, чтобы это ушло. Любые предложения о том, как решить эту проблему?
Скрыть виртуальную клавиатуру в действии, где не найдено никаких операций с клавиатурой
Ответы (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
где вы положили этот метод
- person Bhanu Sharma; 03.04.2014
в моем классе я поставил это
- person Amardeepvijay; 03.04.2014
на самом деле ваш текст редактирования находится в фокусе всякий раз, когда вы входите в это действие, если вы хотите по умолчанию закрыть его, тогда посмотрите мой отредактированный ответ
- person Bhanu Sharma; 03.04.2014
где я вставляю этот код в первое действие, где у меня есть список и текст редактирования... или во второе действие, где я использовал только текстовое представление
- person Amardeepvijay; 03.04.2014
вставьте его туда, где вы не хотите использовать мягкую клавиатуру
- person Bhanu Sharma; 03.04.2014
но в моем втором действии ... нет редактирования текста, используется только текстовое представление ... так что я делаю для этого оператора (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