una teclado posicion para mano lado grandes grande descargar desactivar dedos como celular cambiar achico android onclick android-softkeyboard

posicion - oculta el teclado cuando el usuario toca cualquier otro lugar de la pantalla en Android



teclado android (6)

Necesito ocultar el softkeypad en Android cuando el usuario haga clic en cualquier lugar que no sea un Edittext. Hay muchas ayudas para iphone pero no para android. Probé este código pero no funciona :(

final RelativeLayout base = (RelativeLayout) findViewById(R.id.RelativeLayout1); findViewById(R.id.base).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(base.getWindowToken(), 0); } });

Gracias por adelantado !


Bueno, he hecho de esta manera:

Añade código en tu actividad .

Esto también funcionaría para Fragmento , no es necesario agregar este código en Fragmento .

@Override public boolean dispatchTouchEvent(MotionEvent ev) { View view = getCurrentFocus(); if (view != null && (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) && view instanceof EditText && !view.getClass().getName().startsWith("android.webkit.")) { int scrcoords[] = new int[2]; view.getLocationOnScreen(scrcoords); float x = ev.getRawX() + view.getLeft() - scrcoords[0]; float y = ev.getRawY() + view.getTop() - scrcoords[1]; if (x < view.getLeft() || x > view.getRight() || y < view.getTop() || y > view.getBottom()) ((InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow((this.getWindow().getDecorView().getApplicationWindowToken()), 0); } return super.dispatchTouchEvent(ev); }

Espero que esto te ayudará.


El mejor trabajo que encontré fue usarlo como se muestra abajo,

Reemplace dispatchTouchEvent() e intente obtener el área de EditText usando Rect

@Override public boolean dispatchTouchEvent(MotionEvent ev) { int x = (int) ev.getX(); int y = (int) ev.getY(); if (ev.getAction() == MotionEvent.ACTION_DOWN && !getLocationOnScreen(etFeedback).contains(x, y)) { InputMethodManager input = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); input.hideSoftInputFromWindow(etFeedback.getWindowToken(), 0); } return super.dispatchTouchEvent(ev); }

Método que caculate 4 corner of View (aquí su EditText)

protected Rect getLocationOnScreen(EditText mEditText) { Rect mRect = new Rect(); int[] location = new int[2]; mEditText.getLocationOnScreen(location); mRect.left = location[0]; mRect.top = location[1]; mRect.right = location[0] + mEditText.getWidth(); mRect.bottom = location[1] + mEditText.getHeight(); return mRect; }

Al utilizar el código anterior, podemos detectar el área de EditText y podemos verificar si el toque en la pantalla es parte del área de EditText o no. Si es parte de EditText , no haga nada, deje que el toque haga su trabajo, y si el toque no contiene el área de EditText , simplemente cierre la tecla programable.

******EDITAR******

Acabo de encontrar otro enfoque si no queremos proporcionar ningún EditText como entrada y queremos ocultar el teclado dentro de toda la aplicación cuando el usuario toca en otro lugar que no sea EditText. Luego, debe crear una BaseActivity y escribir un código global para ocultar el teclado como se muestra a continuación:

@Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean handleReturn = super.dispatchTouchEvent(ev); View view = getCurrentFocus(); int x = (int) ev.getX(); int y = (int) ev.getY(); if(view instanceof EditText){ View innerView = getCurrentFocus(); if (ev.getAction() == MotionEvent.ACTION_UP && !getLocationOnScreen(innerView).contains(x, y)) { InputMethodManager input = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); input.hideSoftInputFromWindow(getWindow().getCurrentFocus() .getWindowToken(), 0); } } return handleReturn; }


Intenté esto para ocultar el teclado. Necesitas pasar el método en tu archivo de diseño.

public void setupUI(View view) { // Set up touch listener for non-text box views to hide keyboard. if (!(view instanceof EditText)) { view.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { hideSoftKeyboard(LOGSignUpActivity.this); return false; } }); } //If a layout container, iterate over children and seed recursion. if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { View innerView = ((ViewGroup) view).getChildAt(i); setupUI(innerView); } } }


Llame a este método en su MainAcitivity.class

public static void hideKeyboardwithoutPopulate(BaseActivity activity) { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService( Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow( activity.getCurrentFocus().getWindowToken(), 0); }


Para aquellos que están buscando un código Xamarin para esto, aquí van:

public override bool DispatchTouchEvent(MotionEvent ev) { try { View view = CurrentFocus; if (view != null && (ev.Action == MotionEventActions.Up || ev.Action == MotionEventActions.Move) && view is EditText && !view.Class.Name.StartsWith("android.webkit.")) { int[] Touch = new int[2]; view.GetLocationOnScreen(Touch); float x = ev.RawX + view.Left - Touch[0]; float y = ev.RawY + view.Top - Touch[1]; if (x < view.Left || x > view.Right || y < view.Top || y > view.Bottom) ((InputMethodManager)GetSystemService(InputMethodService)).HideSoftInputFromWindow((Window.DecorView.ApplicationWindowToken), 0); } } catch (System.Exception ex) { } return base.DispatchTouchEvent(ev); }


Puede usar onTouchEvent() para ocultar el Softkeyboard .

@Override public boolean onTouchEvent(MotionEvent event) { InputMethodManager imm = (InputMethodManager)getSystemService(Context. INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); return true; }

Aunque esta solución funciona, pero lo mejor que sugeriría es utilizar la siguiente answer ya que ofrece la mejor solución para cerrar el teclado tocando en cualquier otro lugar que no sea Editar texto.