SPANNABLE Textview

SpannableStringBuilder + TextView.BufferType.SPANNABLE




how to set click on multiple word in text or String

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

Run/install/debug Android applications over Wi-Fi ?

Open Teminal/cmd --------------- Below steps is for Android 10 or lower Step 1 - Connect the device via USB and make sure debugging is work...