在android中的spannable textview的特定部分设置clicklistener

时间:2017-05-17 10:06:30

标签: android

我很难在android中的ClickListener中的Text的特定部分设置SpannableTextView

我有这样的文字:

  

注册即表示您同意条款和服务

我想将clicklistener设置为粗体部分?有可能吗?

4 个答案:

答案 0 :(得分:4)

是的,这是可能的。

private void prepareTerms(){
    String termsAndConditionsText = ...;
    String discoverTermsText = ...;

    SpannableString ss = new SpannableString(discoverTermsText);
    int index = discoverTermsText.indexOf(termsAndConditionsText);
    ss.setSpan(
            new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    // open a webview here if you want
                }
            },
            index,
            index + termsAndConditionsText.length(),
            SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE
    );
    mTermAndCondTextView.setText(ss);
    mTermAndCondTextView.setMovementMethod(LinkMovementMethod.getInstance());
}

答案 1 :(得分:0)

您可以使用android.text.Spannable类中的方法 setSpan

官方documentation

中提供的完整示例和必要信息

在您的字符串中“通过注册即表示您同意条款和服务”,起始值为35,结尾为stringObj.length

答案 2 :(得分:0)

SpannableStringBuilder builder = new SpannableStringBuilder();
builder.setSpan(new ClickableSpan() {
    @Override
    public void onClick(View widget) {
    // click function
    }
 }, start_index, end_index, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(builder);

答案 3 :(得分:0)

试试这段代码:

    String text1 = "By registering you agree to the" + " ";
    String text2 = "Terms And Services";

    SpannableString spannableString = new SpannableString(text1 + text2);
    ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void onClick(View view) {
            // listen click here
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setUnderlineText(true);
            ds.setColor(Color.BLACK);
        }
    };

    spannableString.setSpan(clickableSpan, text1.length(), text1.length() + text2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textview.setText(spannableString);
    textview.setMovementMethod(LinkMovementMethod.getInstance());
    textview.setHighlightColor(Color.BLACK);