with studio plain personalizar eventos espaƱol edittext android textview android-edittext spannable

studio - textview android



seleccione una palabra en un toque en TextView/EditText (2)

Use Linkify , use su propia expresión regular para invocar su rutina con el clic de una palabra.

Vea aquí para el Ejemplo de WikiWord y el Blogpost relevante

Cómo seleccionar una palabra en un toque en TextView / EditText en Android. Tengo algo de texto en un TextView / EditText y cuando el usuario toca una palabra, quiero que esa palabra sea seleccionada y después de eso, cuando llame al método getSelectedText (), debería devolverme la palabra seleccionada. Cualquier ayuda sería apreciada.

Mi objetivo es realizar alguna acción cuando el usuario toca una palabra en particular en TextView / EditText .


ACTUALIZACIÓN: Otro enfoque mejor es utilizar BreakIterator :

private void init() { String definition = "Clickable words in text view ".trim(); TextView definitionView = (TextView) findViewById(R.id.text); definitionView.setMovementMethod(LinkMovementMethod.getInstance()); definitionView.setText(definition, BufferType.SPANNABLE); Spannable spans = (Spannable) definitionView.getText(); BreakIterator iterator = BreakIterator.getWordInstance(Locale.US); iterator.setText(definition); int start = iterator.first(); for (int end = iterator.next(); end != BreakIterator.DONE; start = end, end = iterator .next()) { String possibleWord = definition.substring(start, end); if (Character.isLetterOrDigit(possibleWord.charAt(0))) { ClickableSpan clickSpan = getClickableSpan(possibleWord); spans.setSpan(clickSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } private ClickableSpan getClickableSpan(final String word) { return new ClickableSpan() { final String mWord; { mWord = word; } @Override public void onClick(View widget) { Log.d("tapped on:", mWord); Toast.makeText(widget.getContext(), mWord, Toast.LENGTH_SHORT) .show(); } public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); } }; }

ANTIGUA RESPUESTA

Quería manejar clic en mi propia actividad. Lo resolví por el siguiente código:

private void init(){ String definition = "Clickable words in text view ".trim(); TextView definitionView = (TextView) findViewById(R.id.definition); definitionView.setMovementMethod(LinkMovementMethod.getInstance()); definitionView.setText(definition, BufferType.SPANNABLE); Spannable spans = (Spannable) definitionView.getText(); Integer[] indices = getIndices( definitionView.getText().toString(), '' ''); int start = 0; int end = 0; // to cater last/only word loop will run equal to the length of indices.length for (int i = 0; i <= indices.length; i++) { ClickableSpan clickSpan = getClickableSpan(); // to cater last/only word end = (i < indices.length ? indices[i] : spans.length()); spans.setSpan(clickSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); start = end + 1; } } private ClickableSpan getClickableSpan(){ return new ClickableSpan() { @Override public void onClick(View widget) { TextView tv = (TextView) widget; String s = tv .getText() .subSequence(tv.getSelectionStart(), tv.getSelectionEnd()).toString(); Log.d("tapped on:", s); } public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); } }; } public static Integer[] getIndices(String s, char c) { int pos = s.indexOf(c, 0); List<Integer> indices = new ArrayList<Integer>(); while (pos != -1) { indices.add(pos); pos = s.indexOf(c, pos + 1); } return (Integer[]) indices.toArray(new Integer[0]); }