2016-08-16 5 views
1

Я хочу изменить цвет одного слова, когда касаюсь его.андроид изменение одно слово цвет при касании

Например: Здравствуйте, меня зовут Роберт.

(по умолчанию, все черные)

Теперь, если пользователь прикасается слово «Роберт», я хочу, чтобы цвет «Роберта», чтобы изменить RED.

Как это сделать? (Я новичок в Android)

textview.setTextColor() меняет все, мне нужно только одно слово.

+2

Использование 'SpannableString': http://www.chrisumbel.com/article/android_textview_rich_text_spannablestring – pnavk

ответ

0

L. Swifter находится на правильном пути.

Вот очень простая версия, из которой вы можете построить.

SpannableString spannableString = new SpannableString(yourstring); 

ClickableSpan clickableSpan = new ClickableSpan() { 
     boolean clicked = false; 

     @Override 
     public void onClick(View view) { 
      clicked = true; 
      view.invalidate(); 
     } 

     @Override 
     public void updateDrawState(TextPaint ds) { 
      if (this.clicked) ds.setColor(Color.RED); 
     } 
    }; 

spannableString.setSpan(clickableSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

textview.setText(spannableString); 
textview.setMovementMethod(LinkMovementMethod.getInstance()); 

начало и конец позиции индекс «Роберта»

Убедитесь, что ваш SetText использует spannableString, а не исходную строку.

Удачи!

0

Вы можете добавить тэг HTML <font> в текст TextView.

2

Я считаю, что SpannableString и ClickableSpan - это то, что вы ищите.

Для получения дополнительной информации, проверьте this.

И Html.fromHtml также подходит для этого.

0
  1. Использование onTouch вычислить, какое слово вы просто прикоснулись, look at this.
  2. И:

    TextView.setText (Html.fromHtml ("assumble вашей строки стиля HTML, чтобы изменить заданный цвет слова"));

0

Обобщить ответ Л. Swifter и ТМС, также использовал ответ от select a word on a tap in TextView/EditText

Следующий код должен быть работа, если нажать любое слово в TextView. Цвет будет изменен на красный, если вы щелкнете по нему. Другие слова цвет будет сброшен на черный.

public class MainActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    final TextView lTextView = (TextView) findViewById(R.id.textView); 
    breakEveryWord("Clickable words in text view ", lTextView); 
} 
... 

private void breakEveryWord(String passage, final TextView pTextView) { 
    String definition = passage.trim(); 
    pTextView.setMovementMethod(LinkMovementMethod.getInstance()); 
    pTextView.setText(definition, TextView.BufferType.SPANNABLE); 
    final Spannable spans = (Spannable) pTextView.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 = new CustomClickableSpan(possibleWord, new CallBack() { 
       @Override 
       public void clearAll() { 
        CustomClickableSpan[] toRemoveSpans = spans.getSpans(0, pTextView.getText().length(), CustomClickableSpan.class); 
        for (CustomClickableSpan toRemoveSpan : toRemoveSpans) { 
         toRemoveSpan.reset(pTextView); 
        } 
       } 
      }); 
      spans.setSpan(clickSpan, start, end, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     } 
    } 
} 
public static class CustomClickableSpan extends ClickableSpan { 
    final String mWord; 
    boolean clicked = false; 
    final CallBack mCallBack; 
    public CustomClickableSpan(String pWord, CallBack pCallBack) { 
     mWord = pWord; 
     mCallBack = pCallBack; 
    } 
    public void reset(View widget) { 
     clicked = false; 
     widget.invalidate(); 
    } 
    @Override 
    public void onClick(View widget) { 
     Log.d("tapped on:", mWord); 
     mCallBack.clearAll(); 
     clicked = true; 
     widget.invalidate(); 
    } 
    @Override 
    public void updateDrawState(TextPaint ds) { 
     super.updateDrawState(ds); 
     ds.setUnderlineText(false); 
     ds.setColor(Color.BLACK); 
     if (this.clicked) ds.setColor(Color.RED); 
    } 
} 
public interface CallBack { 
    void clearAll(); 
} 
} 
Смежные вопросы