temas teclado personalizar para los google gboard funciona emojis desinstalar descargar configurar como cambiar activar android

para - personalizar teclado android



Ocultar el teclado por defecto al hacer clic en Android (10)

Agregué lo siguiente a mi actividad. Funciona porque tocar fuera de una Vista enfocable no cambia el enfoque (entonces w == v) pero el toque estará fuera del rectángulo de la Vista.

public boolean dispatchTouchEvent(MotionEvent event) { View v = getCurrentFocus(); boolean ret = super.dispatchTouchEvent(event); 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()) ) { inputManager.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0); } return ret; }

[editar: corregir un error menor]

Quiero ocultar el teclado virtual cuando hago clic fuera del cuadro de edición en una pantalla. ¿Cómo puedo hacer esto?


Como complemento a la respuesta aceptada.

Si la respuesta aceptada no funciona para usted, puede agregar el método hideSoftKeyboard() método onClick() del onClickListener de su EditText . Por ejemplo:

editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { hideSoftKeyboard(); } });

(coloque el código anterior en onResume() o en otro lugar)

PD. la definición de hideSoftKeyboard()

private void hideSoftKeyboard(){ if(getCurrentFocus()!=null && getCurrentFocus() instanceof EditText){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); } }


En primer lugar, gracias a Daniel, su código es realmente bueno y lo estuve usando por un tiempo.

Recientemente me di cuenta de que tengo que mejorarlo. El problema fue desplazar la página. Tenía muchos EditText s en mi proyecto y estaba ocultando el teclado cuando desplazas la página.

Se me ocurrió una solución utilizando onGestureListener lugar de anular dispatchTouchEvent.

public class TabActivity extends ActionBarActivity implements GestureDetector.OnGestureListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... ... gestureScanner = new GestureDetector(TabActivity.this,this); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { gestureScanner.onTouchEvent(ev); return super.dispatchTouchEvent(ev); } @Override public boolean onSingleTapUp(MotionEvent event) { View v = getCurrentFocus(); if (v instanceof EditText) { View w = getCurrentFocus(); int scrcoords[] = new int[2]; w.getLocationOnScreen(scrcoords); boolean hide = true; View view = ((ViewGroup)findViewById(android.R.id.content)).getChildAt(0); ArrayList<View> editTexts = view.getFocusables(0); // Get All EditTexts in view for(int i=0; i< editTexts.size(); i++){ View editText = editTexts.get(i); editText.getLocationOnScreen(scrcoords); float x = event.getRawX(); float y = event.getRawY(); int viewX = scrcoords[0]; int viewY = scrcoords[1]; // If touch is in any of EditText, keep keyboard active, otherwise hide it. if (event.getAction() == MotionEvent.ACTION_UP && ( x > viewX && x < (viewX + editText.getWidth())) && ( y > viewY && y < (viewY + editText.getHeight())) ) { hide = false; } } if (hide) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0); } } return true; } @Override public boolean onScroll(MotionEvent event, MotionEvent e2, float distanceX, float distanceY) { return true; } }

Por lo tanto, si el usuario desplaza la página, va al método onScroll y no hace nada. Si los usuarios solo tocan la pantalla, se activa el método onSingleTapUp .

También tuve que cambiar si la declaración del código de Daniel. Daniel estaba comprobando si el evento táctil está fuera del EditText . Como tengo muchas EditViews , cambié el código para buscar si el evento táctil está dentro de cualquiera de EditText s.

Funciona bien conmigo, hágamelo saber para cualquier tipo de mejoras o errores.


Esto se puede hacer usando el siguiente código:

1) Tome una referencia de su diseño principal en el código java usando findViewById ().

2) A continuación, aplique setOnTouchListener ().

3) Agregue el siguiente código en onTouchMethod ().

lin = (LinearLayout) findViewById(R.id.lin); lin.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0); return false; } });


Obtuve una buena solución. Sé que es demasiado tarde, pero cuando busco la mayoría de las veces, obtengo este enlace como primer enlace. por lo que puede ser útil para otros. Si hace clic en cualquier texto / botón, se ocultará el teclado que ya está visible.

date.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Hide soft keyboard InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // here i am showing the Date Dialog. one can proceed with their functionality //show date picker dialog showDialog(Date_DIALOG_ID); } });


Para ocultar a la fuerza el teclado, usaría el siguiente código ... Lo puse en un método llamado ''hideSoftKeyboard ()''. Como lo mencionó Falmarri, el softkeyboard debería ocultarse al hacer clic fuera de él. Sin embargo, si llama a este método en un ''onClick ()'' de otro elemento, cerrará el teclado a la fuerza.

private void hideSoftKeyboard(){ if(getCurrentFocus()!=null && getCurrentFocus() instanceof EditText){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(yourEditTextHere.getWindowToken(), 0); } }


Solo establece el tipo de entrada en nulo asi

editText.setInputType(InputType.TYPE_NULL);


Tuve que editar este para que funcione. Se agregó una verificación para ver si la vista enfocada es un texto de edición.

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

Probablemente podría hacerse de una manera más suave pero funciona muy bien.


establece inputType en cero para editar texto
editText.setInputType(0);

es un trabajo para mi


public boolean OutsideTouchEvent(MotionEvent m_event) { View v = getCurrentFocus(); boolean value = super.dispatchTouchEvent(m_event); View w = getCurrentFocus(); int scrcoords[] = new int[2]; w.getLocationOnScreen(scrcoords); float x = m_event.getRawX() + w.getLeft() - scrcoords[0]; float y = m_event.getRawY() + w.getTop() - scrcoords[1]; if (m_event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) { InputMethodManager inputMethodManager = (InputMethodManager) YourActivity.this.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(YourActivity.this.getCurrentFocus().getWindowToken(), 0); } return value; }