我想改變一個詞的顏色,當我觸摸它。安卓更改一個詞的顏色觸摸
例如:你好,我的名字是羅伯特。
(默認情況下,所有黑色)
現在,如果用戶觸摸單詞「羅伯特」,我想「羅伯特」的顏色變爲紅色。
我該怎麼做? (我是Android新手)
textview.setTextColor()改變了整個事情,我只想要一個詞。
我想改變一個詞的顏色,當我觸摸它。安卓更改一個詞的顏色觸摸
例如:你好,我的名字是羅伯特。
(默認情況下,所有黑色)
現在,如果用戶觸摸單詞「羅伯特」,我想「羅伯特」的顏色變爲紅色。
我該怎麼做? (我是Android新手)
textview.setTextColor()改變了整個事情,我只想要一個詞。
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,而不是原始字符串。
玩得開心!
您可以將一個HTML <font>
標記添加到TextView
的文本。
和:
TextView.setText(Html.fromHtml( 「assumble你的HTML風格的字符串來改變指定的字顏色」));
總結L.更快和TML的答案,還使用了答案從 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();
}
}
使用'SpannableString':http://www.chrisumbel.com/article/android_textview_rich_text_spannablestring – pnavk