SpannableStringBuilder + TextView.BufferType.SPANNABLE
how to set click on multiple word in text or String
using SpannableStringBuilder
// initialize or set
using SpannableStringBuilder
// initialize or set
TextView textView = (TextView) findViewById(R.id.textview); textView.setMovementMethod(LinkMovementMethod.getInstance()); SpannableStringBuilder comments = getclickableText("Hello @Android how are you ?"); textView.setText(comments, TextView.BufferType.SPANNABLE);
// method for creat spannable sting
public SpannableStringBuilder getclickableText(String comment) { String stringBuilder = ""; SpannableStringBuilder builder = new SpannableStringBuilder(); for (int i = 0; i < comment.length(); i++) { String later = comment.substring(i, i + 1); boolean isEnter = false; try { String laterNext = comment.substring(i + 1, i + 2); if (!laterNext.equalsIgnoreCase(" ")) { isEnter = true; } } catch (Exception e) { e.printStackTrace(); } Log.d("TAG", "Char " + later); if (later.equalsIgnoreCase("@") && isEnter) { String remailString = comment.substring(i, comment.length()); String aTString = ""; for (int j = 0; j < remailString.length(); j++) { if (!remailString.substring(j, j + 1).equalsIgnoreCase(" ")) { aTString = aTString + remailString.substring(j, j + 1); } else { break; } } // stringBuilder = stringBuilder + aTString; i = i + aTString.length() - 1; SpannableString ss = new SpannableString(aTString); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View textView) { } }; ss.setSpan(new MyClickableSpan(aTString), 0, aTString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); builder.append(ss); stringBuilder = stringBuilder + ss; } else { stringBuilder = stringBuilder + later; SpannableString ss = new SpannableString(later); builder.append(ss); } } return builder; } class MyClickableSpan extends ClickableSpan {// extend ClickableSpan String clicked; public MyClickableSpan(String string) { super(); clicked = string; } public void onClick(View textView) { TextView tv = (TextView) textView; Spanned s = (Spanned) tv.getText(); int start = s.getSpanStart(this); int end = s.getSpanEnd(this); Log.d("TAG", "onClick [" + s.subSequence(start, end) + "]"); Toast.makeText(MainActivity.this, s.subSequence(start, end), Toast.LENGTH_SHORT).show(); } public void updateDrawState(TextPaint ds) { ds.setColor(Color.parseColor("#26BDBE")); ds.setUnderlineText(false); } }
No comments:
Post a Comment