Android: Launch activity from clickable text

前端 未结 3 511
臣服心动
臣服心动 2020-11-28 06:23

Is there any way I can launch an activity from a portion of a string.

eg I have this in my strings.xml file:



        
3条回答
  •  半阙折子戏
    2020-11-28 06:59

    Try this,

    final Context context = ... // whereever your context is
    CharSequence sequence = Html.fromSource(context.getString(R.string.clickable_string));
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    UnderlineSpan[] underlines = strBuilder.getSpans(UnderlineSpan.class);
    for(UnderlineSpan span : underlines) {
       int start = strBuilder.getSpanStart(span);
       int end = strBuilder.getSpanEnd(span);
       int flags = strBuilder.getSpanFlags(span);
       ClickableSpan myActivityLauncher = new ClickableSpan() {
         public void onClick(View view) {
           context.startActivity(getIntentForActivityToStart());
         }
       };
    
       strBuilder.setSpan(myActivityLauncher, start, end, flags);
    }
    
    TextView textView = ...
    textView.setText(strBuilder);
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    

    Basically you have to attach a Span object to the range of characters you want to be clickable. Since you are using HTML anyways, you can use the underline spans placed by the Html.fromSource() as markers for your own spans.

    Alternatively you could also define a Tag within the string that only you know of. i.e. And supply your own tag handler to the Html.fromSource() method. This way your TagHandler instance could do something like, surround the tagged text with a specific color, underline, bold and make it clickable. However I would only recommend the TagHandler approach if you find yourself writing this type of code a lot.

提交回复
热议问题