タッチすると1ワードの色を変えたい。アンドロイド変更ワンワードカラータッチ
例:こんにちは、私の名前はロバートです。 (デフォルトでは、黒のすべて)
ユーザーが単語「ロバート」を触れると今、私は「ロバート」の色が赤に変更したいです。
どうすればよいですか? (私はAndroidの新機能です)
textview.setTextColor()はすべてを変更します。
タッチすると1ワードの色を変えたい。アンドロイド変更ワンワードカラータッチ
例:こんにちは、私の名前はロバートです。 (デフォルトでは、黒のすべて)
ユーザーが単語「ロバート」を触れると今、私は「ロバート」の色が赤に変更したいです。
どうすればよいですか? (私は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、いない元の文字列を使用していることを確認します。
は、お楽しみに!
TextView
のテキストには、<font>
というタグを追加できます。
私はSpannableString
とClickableSpan
があなたが探しているものだと思います。
詳細については、thisを確認してください。
また、Html.fromHtml
もこれに対応しています。
とを計算する:
TextView.setText(Html.fromHtml( "指定された単語の色を変更するには、HTML形式の文字列をassumble"));
はまた、TextViewの中に任意の単語をクリックすると、次のコードは、作業する必要があります select a word on a tap in TextView/EditText
からの回答を使用し、L.迅速確実とTMLの答えをまとめます。 クリックすると色が赤に変わります。他の単語の色は黒にリセットされます。
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