2011-12-27 12 views
90

Estoy creando un ClickableSpan, y se muestra correctamente con el texto correcto subrayado. Sin embargo, los clics no se están registrando. ¿Sabes lo que estoy haciendo mal? Gracias, Victor Aquí está el fragmento de código:Android ClickableSpan no llama al clic

view.setText("This is a test");  
ClickableSpan span = new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     log("Clicked"); 
    } 
}; 
view.getText().setSpan(span, 0, view.getText().length(), 
         Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

Respuesta

258

Ha intentado establecer el MovementMethod en la Vista de Texto que contiene el lapso? Que tiene que hacer eso para hacer el trabajo ... clic

tv.setMovementMethod(LinkMovementMethod.getInstance()); 
+0

no funcionan bien si 'tv' es de tipo EditarTexto, verdadera puede hacer clic en el lapso pero no editar esta manera normal. –

+0

¡muchas gracias! ¡Es trabajo para mí también! ¿Me puede explicar por qué acerca de esta configuración? –

+0

Gracias, funcionó. – Prashant

1

Después de algún ensayo y error, la secuencia de configuración de la materia tv.setMovementMethod(LinkMovementMethod.getInstance()); hace.

Aquí está mi código completo

String stringTerms = getString(R.string.sign_up_terms); 
Spannable spannable = new SpannableString(stringTerms); 
int indexTermsStart = stringTerms.indexOf("Terms"); 
int indexTermsEnd = indexTermsStart + 18; 
spannable.setSpan(new UnderlineSpan(), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     Log.d(TAG, "TODO onClick.. Terms and Condition"); 
    } 
}, indexTermsStart, indexTermsEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

int indexPolicyStart = stringTerms.indexOf("Privacy"); 
int indexPolicyEnd = indexPolicyStart + 14; 
spannable.setSpan(new UnderlineSpan(), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ForegroundColorSpan(getColor(R.color.theme)), indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
spannable.setSpan(new ClickableSpan() { 
    @Override 
    public void onClick(View widget) { 
     Log.d(TAG, "TODO onClick.. Privacy Policy"); 
    } 
}, indexPolicyStart, indexPolicyEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

TextView textViewTerms = (TextView) findViewById(R.id.sign_up_terms_text); 
textViewTerms.setText(spannable); 
textViewTerms.setClickable(true); 
textViewTerms.setMovementMethod(LinkMovementMethod.getInstance()); 
Cuestiones relacionadas