如何在TextView中创build几个可点击的文本部分?

如何在TextView中创build几个可点击的文本部分? 每个可点击的部分都必须有自己的动作。

  • 如何更改导航抽屉标题中的TextView的文本?
  • 如何绘制一个TextView到一个位图(没有在绘图中显示)
  • 在TextView中用复合绘图设置实际的文本填充
  • Android的 - 如何在ListView或ExpandableListView中设置TextView的填充
  • Android TextView长阴影
  • 如何在textview上设置下划线文本?
  • Android:在LockScreen上覆盖TextView
  • Android文字样式缺少轻,中,薄,
  • 你可以使用android.text.style.ClickableSpan

    SpannableString ss = new SpannableString("Hello World"); ClickableSpan span1 = new ClickableSpan() { @Override public void onClick(View textView) { // do some thing } }; ClickableSpan span2 = new ClickableSpan() { @Override public void onClick(View textView) { // do another thing } }; ss.setSpan(span1, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(span2, 6, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(ss); textView.setMovementMethod(LinkMovementMethod.getInstance()); 

    我在不同的资源中存储主文本和可点击的文字。

    某些configuration中不存在资源string。

      String[] links = new String[3]; links[0] = cntx.getString(cntx.getResources().getIdentifier("footerLink1", "string", cntx.getPackageName())); links[1] = cntx.getString(cntx.getResources().getIdentifier("footerLink2", "string", cntx.getPackageName())); links[2] = cntx.getString(cntx.getResources().getIdentifier("footerLink3", "string", cntx.getPackageName())); String text = String.format(cntx.getString(cntx.getResources().getIdentifier("footerDisclaimer", "string", cntx.getPackageName())), links[0], links[1], links[2]); SpannableString ss = new SpannableString(text); setSpanOnLink(ss, links[0], new ClickableSpan() { @Override public void onClick(View textView) { Log.i("Disclaimer Footer", "1 click"); //TODO run item } }); setSpanOnLink(ss, links[1], new ClickableSpan() { @Override public void onClick(View textView) { Log.i("Disclaimer Footer", "2 click"); //TODO run item } }); setSpanOnLink(ss, links[2], new ClickableSpan() { @Override public void onClick(View textView) { Log.i("Disclaimer Footer", "3click"); //TODO run item } }); TextView t1 = new TextView(cntx); t1.setTextSize(TypedValue.COMPLEX_UNIT_SP, 8); t1.setText(ss); t1.setMovementMethod(LinkMovementMethod.getInstance()); private void setSpanOnLink(SpannableString ss, String link, ClickableSpan cs) { String text = ss.toString(); int start = text.indexOf(link); int end = start + link.length(); ss.setSpan(cs, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } 

    这对我有用:

    在xml中:

      <TextView android:id="@+id/tv_by_continuing_str" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:textSize="15sp" tools:text="Test msg 1 2, 3" android:textColor="@color/translucent_less_white3" android:textColorLink="@color/white" android:gravity="center|bottom" android:layout_above="@+id/btn_privacy_continue" /> 

    在strings.xml中

     < string name="by_continuing_str2">< ! [ CDATA[By continuing to use this app, you agree to our <a href="https://go.test.com" style="color:gray"/> Privacy Statement </a> and <a href="https://go.test.com" style="color:gray"/>Services Agreement.]]>< / string> 

    在活动中:

     TextView tv_by_continuing = (TextView) findViewById(R.id.tv_by_continuing); tv_by_continuing.setText(Html.fromHtml(getString(R.string.by_continuing_str2))); tv_by_continuing.setMovementMethod(LinkMovementMethod.getInstance());