validar texto studio seleccionar que personalizar mascara edittext control change android focus android-edittext

studio - seleccionar texto edittext android



Establecer el foco en EditText (13)

El código de Darwind no mostró el teclado.

Esto funciona para mí:

_searchText.requestFocus(); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);

en caso de que el teclado no se muestre, intente forzar:

imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);

Tengo un EditText-Field y configuré un OnFocusChangeListener para él. Cuando pierde el foco, se llama a un método que verifica el valor de EditText con uno en la base de datos. Si el valor de retorno del método es verdadero, se muestra un brindis y el foco debe volver a aparecer en EditText. El enfoque siempre debe volver a EditText y el teclado debe mostrarse, hasta que el valor de retorno del método sea falso.

EDITAR: Creo que todavía no he aclarado mi verdadero problema: ningún otro elemento en la pantalla debería poder editarse, hasta que el valor de EditText se edite en un valor, lo que hace que el método "checkLiganame (liganame)" " falso retorno. Solo EditText-Field debería ser editable.

aquí está mi código (que no funciona para mí):

final EditText Liganame = (EditText) findViewById(R.id.liganame); Liganame.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { String liganame = Liganame.getText().toString(); if (checkLiganame(liganame)) { Toast toast = Toast.makeText(CreateTableActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT); toast.show(); Liganame.requestFocus(); } }

y el método:

public boolean checkLiganame(String liganame) { boolean found = false; DatabaseHelper databaseHelper = new DatabaseHelper(this); SQLiteDatabase db = databaseHelper.getReadableDatabase(); Cursor cursor = db.query("liga", new String[] { "liganame" }, "liganame = ''" + liganame + "''", null, null, null, null); Log.i("Liganame: ", String.valueOf(cursor)); db.close(); if (cursor != null) { found = true; } return found; }

Este código conduce al siguiente resultado: después de que EditText ha perdido el foco, el foco salta de nuevo a EditText, pero ya no puedo editar el texto.

EDIT2: Cambió mi código. Guión:

Hago clic en el primer EditText y pongo un String en él, que ya está en la base de datos. La tostada está mostrando. Ahora no puedo editar mi cadena más. Hago clic en "siguiente" en el teclado y el foco permanece en el primer EditText. Intento editar mi String, pero no pasa nada. En cambio, mi nueva cadena se muestra en el segundo EditText. Hago clic en la flecha hacia atrás de mi dispositivo y reclick en el primer y segundo EditText -> no se muestra el teclado.

Aquí está mi nuevo Código:

public class CreateTableActivity extends Activity implements OnFocusChangeListener { private EditText Liganame, Mannschaftsanzahl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.create_league); Liganame = (EditText) findViewById(R.id.liganame); Liganame.setOnFocusChangeListener(this); Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl); Mannschaftsanzahl.setOnFocusChangeListener(this); final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button); OnClickListener mCorkyListener = new OnClickListener() { public void onClick(View v) { ButtonClick(); } }; save_button.setOnClickListener(mCorkyListener); } @Override public void onFocusChange(View v, boolean hasFocus) { String liganame = Liganame.getText().toString(); if (checkLiganame(liganame)) { if (Liganame.requestFocus()) { getWindow() .setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); Mannschaftsanzahl.clearFocus(); Toast.makeText(CreateTableActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show(); } } }


Esto cambia el enfoque de EditText cuando se hace clic en el botón:

public class MainActivity extends Activity { private EditText e1,e2; private Button b1,b2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); e1=(EditText) findViewById(R.id.editText1); e2=(EditText) findViewById(R.id.editText2); e1.requestFocus(); b1=(Button) findViewById(R.id.one); b2=(Button) findViewById(R.id.two); b1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { e1.requestFocus(); } }); b2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { e2.requestFocus(); } }); } }


No sé si ya encontró una solución, pero para su problema de edición después de volver a solicitar atención:

¿Has intentado llamar al método selectAll() o setSelection(0) (si es emtpy) en tu edittext1?

Por favor, avíseme si esto ayuda, por lo que voy a editar mi respuesta a una solución completa.


Para Xamarin.Android he creado esta extensión.

public static class ViewExtensions { public static void FocusEditText(this EditText editText, Activity activity) { if (editText.RequestFocus()) { InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService); imm.ShowSoftInput(editText, ShowFlags.Implicit); } } }


Puedes hacer esto con una sola línea:

yourEditText.RequestFocusFromTouch();


Si creamos un EditText dinámicamente, entonces tenemos que establecer requestFocus () como se indica a continuación.

EditText editText = new EditText(this); editText.setWidth(600); editText.requestFocus();

Si ya declaramos el componente en la vista xml, entonces tenemos que encontrarlo y podemos enfocarlo como se indica a continuación.

EditText e1=(EditText) findViewById(R.id.editText1); e1.requestFocus();

Establece solo foco en el componente EditText correspondiente.


Simplemente ponga esta línea en su onCreate()

editText.requestFocus();

Funciona para mí, espero que ayude


Solicitar foco no es suficiente para mostrar el teclado.

Para enfocarte y mostrar el teclado, escribirías algo como esto:

if(myEditText.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); }

EDITAR: Agregar información extra a la respuesta después de que se agregó el método checkLiganame.

En el método checkLiganame, comprueba si el cursor es nulo. El cursor siempre devolverá un objeto, por lo que la comprobación de null no hace nada. Sin embargo, el problema está en la línea db.close();

Cuando cierra la conexión de la base de datos, el Cursor deja de ser válido y probablemente se anula.

Así que cierre la base de datos después de que haya obtenido el valor.

En lugar de buscar el nulo en el cursor, debe verificar si el número de filas devuelto es mayor que 0: if (cursor.getCount ()> 0) y luego establecer su booleano en verdadero si es así.

EDIT2: Aquí hay un código sobre cómo hacerlo funcionar. EDIT3: Lo siento código incorrecto que agregué ...; S

En primer lugar, debes despejar el foco si otro EditText obtiene el foco. Esto se puede hacer con myEditText.clearFocus() . Luego, en su onFocusChangeListener, no debería preocuparse realmente si EditText tiene foco o no, por lo que el OnFocusChangeListener podría verse más o menos así:

public class MainActivity extends Activity implements OnFocusChangeListener { private EditText editText1, editText2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText1 = (EditText) findViewById(R.id.editText1); editText1.setOnFocusChangeListener(this); editText2 = (EditText) findViewById(R.id.editText2); editText2.setOnFocusChangeListener(this); } @Override public void onFocusChange(View v, boolean hasFocus) { String liganame = editText1.getText().toString(); if(liganame.length() == 0) { if(editText1.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); editText2.clearFocus(); Toast.makeText(MainActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show(); } } } }

Reemplace el primer cheque if(liganame.length() == 0) con su propio cheque, entonces debería funcionar. Tome nota de que todas las vistas de EditText deberían haber configurado su onFocusChangeListener de onFocusChangeListener de onFocusChangeListener en el mismo oyente como he hecho en el ejemplo.


Su trabajo de mi parte.

public void showKeyboard(final EditText ettext){ ettext.requestFocus(); ettext.postDelayed(new Runnable(){ @Override public void run(){ InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); keyboard.showSoftInput(ettext,0); } } ,200); }

Esconder

private void hideSoftKeyboard(EditText ettext){ InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(ettext.getWindowToken(), 0);

}


Button btnClear = (Button) findViewById(R.id.btnClear); EditText editText1=(EditText) findViewById(R.id.editText2); EditText editText2=(EditText) findViewById(R.id.editText3); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { editText1.setText(""); editText2.setText(""); editText1.requestFocus(); } });


mEditText.setFocusableInTouchMode(true); mEditText.requestFocus(); if(mEditText.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); }


private void requestFocus(View view) { if (view.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } //Function Call requestFocus(yourEditetxt);


new OnEditorActionListener(){ @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { editText.requestFocus(); //used ******* return true ****** return **true**; } }