2016-08-16 7 views
1

タッチすると1ワードの色を変えたい。アンドロイド変更ワンワードカラータッチ

例:こんにちは、私の名前はロバートです。 (デフォルトでは、黒のすべて)

ユーザーが単語「ロバート」を触れると今、私は「ロバ​​ート」の色が赤に変更したいです。

どうすればよいですか? (私は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

TextViewのテキストには、<font>というタグを追加できます。

2

私はSpannableStringClickableSpanがあなたが探しているものだと思います。

詳細については、thisを確認してください。

また、Html.fromHtmlもこれに対応しています。

0
  1. 使用onTouch、あなただけ触れた単語look at this.
  2. とを計算する:

    TextView.setText(Html.fromHtml( "指定された単語の色を変更するには、HTML形式の文字列をassumble"));

0

はまた、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(); 
} 
} 
関連する問題