EditText formato de cadena personalizado
Busqué todas las preguntas similares a mi problema pero no lo conseguí trabajando. Mi problema es este:
Quiero formatear una cadena en EditText
mientras EditText
. El formato es éste ( siempre es un número de 19 dígitos ):
- Cómo imprimir un doble con dos decimales en Android?
- Conversión de datetime en cadena, horas incorrectas
- Insertar comas en enteros
- ¿Cómo obtener IntelliJ IDEA para hacer la sangría correcta de xml etiquetas con atributos en varias líneas?
- ¿Problema de conversión de DateFormat en java?
012345 01 0123456789 0
Como puede ver, quiero agregar espacios cuando sean necesarios mientras el usuario está escribiendo. Sé que tengo que usar el TextWatcher
pero todo lo que hago no consigo lo que quiero.
Editar :
Aquí está el código de mi último intento:
@Override public void afterTextChanged(Editable s) { if(s.length() == 7 || s.length() == 10 || s.length() == 21){ editText.removeTextChangedListener(this); String newValue; newValue= s.insert((s.length()-1), " ").toString(); //Log.d("AFTER",newValue); editText.setText(newValue); editText.setSelection(newValue.length()); editText.addTextChangedListener(this); } }
- ¿Cuál es la forma correcta de utilizar el método android.text.format.DateFormat.format
- Cómo formatear una cadena para un android de textview
- Android Studio - ¿Cómo personalizar el formato de salida de Logcat?
- No se puede establecer la fecha de captura / etiqueta DateTime mediante ExifInterface en Android
- Formato de tarjeta de crédito en editar texto en android
- Formato EditarTexto a moneda con números enteros
- Entrada de dinero de Android con decimal fijo
- ¿Cómo mostrar las cantidades formateadas en TextView?
Aquí usted va con él.
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:digits="0123456789" android:inputType="number" /> </LinearLayout>
MainActivity.java:
public class MainActivity extends Activity { int textlength = 0; EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText)findViewById(R.id.editText); editText.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { String text = editText.getText().toString(); textlength = editText.getText().length(); if(text.endsWith(" ")) return; if(textlength == 7 || textlength == 10 || textlength == 21) { editText.setText(new StringBuilder(text).insert(text.length()-1, " ").toString()); editText.setSelection(editText.getText().length()); } }}); } }
De esta manera, acabo de lograr añadir espacios entre los dígitos a intervalos particulares.
Nota: He añadido funciones adicionales a la edittext, de modo que sólo se pueden introducir números y al mismo tiempo el teclado numérico sólo aparece de forma predeterminada. Para más información sobre el camino para el tipo de entradas de usuario, esto podría ayudarle.
- ¿Cómo debo comunicarme entre las actividades?
- ¿Cómo abrir una aplicación android instalada con un clic de botón?