2014-12-01 3 views
3

я использовал Android.text.style.ClickableSpan, чтобы часть (Black) строки (Blue | Black) интерактивными:Android: Сделать частью текста TextView НЕ-clickable во время выполнения?

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()); 

Так Black часть строки кликабельна. Я хочу, чтобы, когда пользователь нажимает Black, он должен сделать Black Not-clickable, а Blue (другая часть той же строки).

Так, чтобы сделать Blue кликабельным, мы можем позвонить setSpan() на том же spannableString в другой раз. Но как я могу сделать Black недоступным для просмотра?

ответ

2

Вы можете позвонить removeSpan(), чтобы удалить все ранее добавленные промежутки. В данном конкретном случае это очень легко, так как мы считаем ссылку на самого Span мы хотим удалить:

ClickableSpan clickableSpan = new ClickableSpan() 
{ 
    @Override 
    public void onClick(View view) 
    { 
     ((SpannableString)textView.getText()).removeSpan(this); 
    } 
}; 

Другой вариант мог бы перебрать все ClickableSpan экземпляры и удалить их все, такие как:

SpannableString str = (SpannableString)textView.getText(); 
    for (ClickableSpan span : str.getSpans(0, str.length(), ClickableSpan.class)) 
     str.removeSpan(span); 

По какой-то причине, что я не могу понять, документация для пролетов действительно бедна ... они достаточно мощные!

Смежные вопросы