2010-12-20 10 views
16

editText no pierde enfoque en mi aplicación cuando hago clic fuera de ella, tiene el borde naranja todo el tiempo y ese cursor de línea negra ... Hice esto LinearLayout de acuerdo con este texto editText : Stop EditText from gaining focus at Activity startup por lo que no consigue centrarse en inicio de la aplicación ..editTexto no está perdiendo el foco

este es mi código:

final EditText et = (EditText)findViewById(R.id.EditText01); 

final InputMethodManager imm = (InputMethodManager) getSystemService(
    INPUT_METHOD_SERVICE); 

et.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
    } 
}); 

et.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasfocus) { 
     if(hasfocus) { 
     imm.showSoftInput(et, InputMethodManager.SHOW_IMPLICIT); 
     } else { 
     imm.hideSoftInputFromWindow(et.getWindowToken(), 0); 
     } 
    } 
}); 

sin embargo, no parece no estar llamando la onFocusChange al hacer clic en cualquier parte fuera de editText!

+2

Estoy experimentando casi lo mismo. Por lo que puedo decir, onFocusChange() NO se genera cuando el foco se mueve de un EditText a otro a través de un evento táctil. Tal vez @Overriding onTouch() podría funcionar? No sé de improviso. –

+0

Problematic this is. Ahora tenemos que modificar el código de 'World \ {EditText}' para que funcione el texto de edición. qué diablos ... – Bondax

Respuesta

1

Cree un escucha onClick, posiblemente en su diseño XML para escuchar los clics en el fondo LinearLayout. Desde aquí puede llamar al .clearFocus() en su EditText después de convertirlo en una variable de instancia de la actividad en la que está trabajando.

+1

no hay método .cancelFocus() ... –

+2

Creo que quise decir '.clearFocus()' – styler1972

15

Es simple. Usted puede poner el siguiente en LinearLayout o cualquier otra cosa:

android:focusableInTouchMode="true" 
+1

Esta es una gran respuesta. Lo usé en RelitiveLayout para que EditText no tenga foco todo el tiempo. +1 – Sevren

0

puede quitar el foco de la EditarTexto, ajustando el foco a otro campo mediante una llamada al método.

Supongamos que he puesto el foco en el botón Atrás al hacer clic en el botón hecho, luego llamo al método en el botón Atrás dentro del botón Hecho haga clic en oyente.

Y su problema está solucionado.

back.requestFocusFromTouch(); 
3

Anulación Activity.dispatchTouchEvent():

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     View view = getCurrentFocus(); 
     if (view != null && view instanceof EditText) { 
      Rect r = new Rect(); 
      view.getGlobalVisibleRect(r); 
      int rawX = (int)ev.getRawX(); 
      int rawY = (int)ev.getRawY(); 
      if (!r.contains(rawX, rawY)) { 
       view.clearFocus(); 
      } 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

De esta manera, cada vez que alguien hace clic en cualquier lugar, usted tiene el control, y es sólo en un punto en el código.

Cuestiones relacionadas