propiedades - Android: ¿No se puede hacer clic en el texto de TextView durante la ejecución?
programacion android pdf 2018 (1)
Android.text.style.ClickableSpan
para hacer una parte ( Black
) de una cadena ( Blue | Black
) en la que se puede hacer clic:
SpannableString spannableString = new SpannableString("Blue | Black ");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
//...
}
};
ss.setSpan(clickableSpan, 7, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView textView = (TextView) findViewById(R.id.secondActivity_textView4);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());
Entonces se puede hacer clic en la parte Black
de la cadena. Lo que quiero es que cuando el usuario haga clic en Black
, haga clic en Black
no seleccionable y Blue
(otra parte de la misma cadena).
Entonces, para poder hacer clic en Blue
, podemos llamar a setSpan()
en el mismo spannableString
otro momento. ¿Pero cómo puedo hacer que Black
no se pueda hacer clic?
Puede llamar a removeSpan()
para eliminar cualquier removeSpan()
agregado previamente. En este caso particular, es muy fácil, ya que mantenemos una referencia al mismo intervalo que queremos eliminar:
ClickableSpan clickableSpan = new ClickableSpan()
{
@Override
public void onClick(View view)
{
((SpannableString)textView.getText()).removeSpan(this);
}
};
Otra opción podría ser iterar sobre todas las instancias de ClickableSpan
y eliminarlas todas, como por ejemplo:
SpannableString str = (SpannableString)textView.getText();
for (ClickableSpan span : str.getSpans(0, str.length(), ClickableSpan.class))
str.removeSpan(span);
Por alguna razón que no puedo comprender, la documentación de los tramos es realmente pobre ... ¡son bastante poderosos!