1. 程式人生 > >textview的多種字型和一個textview中的多個點選事件

textview的多種字型和一個textview中的多個點選事件

在實際開發當中。我們經常會遇到像使用者協議這種形式的textview。這種textview一般都是隻有特殊的幾個字有點選事件。別的都沒有,那麼怎麼辦呢。

後來我自己在網上找了很多發現了一種實現方式。我感覺挺不錯的。就拿出來和大家分享一下

首先建立一個textview

protected TextView agreement = (TextView)findViewById(R.id.textview);
其次,建立一個自己的clickableSpan類
public class My_ClickableSpan extends ClickableSpan {
    private String content;
    private Context context;
    private View imageView;

    public My_ClickableSpan(Context context, String content) {
        this.context = context;
        this.content = content;
    }

    public My_ClickableSpan(Context context, String content, View imageView) {
        this.context = context;
        this.content = content;
        this.imageView = imageView;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        if (content.equals("我已閱讀並同意"))
            ds.setColor(context.getResources().getColor(R.color.loginTextHint));
        else if (content.equals("《雲聯汽車服務協議》"))
            ds.setColor(context.getResources().getColor(R.color.loginBg));
    }

    @Override
    public void onClick(View widget) {
        if (content.equals("我已閱讀並同意")) {
            if (imageView.isSelected()) {
                imageView.setSelected(false);
            } else {
                imageView.setSelected(true);
            }
        } else if (content.equals("《雲聯汽車服務協議》")) {
            ToastUtil.showMessage("檢視");
        }
    }
}
最後在我們的activity中生命並使用我們自定義的這個ClickableSpan
String agreementHead = "我已閱讀並同意";
        String agreementEnd = "《雲聯汽車服務協議》";
        SpannableString spanAgreementHead = new SpannableString(agreementHead);
        SpannableString spanAgreementEnd = new SpannableString(agreementEnd);
        ClickableSpan my_clickableSpan1 = new My_ClickableSpan(this, agreementHead, isAgreement);
        ClickableSpan my_clickableSpan2 = new My_ClickableSpan(this, agreementEnd);
        spanAgreementHead.setSpan(my_clickableSpan1, 0, agreementHead.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spanAgreementEnd.setSpan(my_clickableSpan2, 0, agreementEnd.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        agreement.append(spanAgreementHead);
        agreement.append(spanAgreementEnd);
        agreement.setMovementMethod(LinkMovementMethod.getInstance());

如此,此方式就設定好了

再次附贈一個知識單純的設定多種字型的方式:在實際開發中。我們也會遇到單純的只是在一個textview中設定兩種字型。並不需要兩種點選事件,在這種情況下。我們可以用HTML的方式去設定字型的多種顏色,簡潔又快速。上面的方式呢。適用於一個textview中有多種字型和多種點選事件的情況。但是如果只是多種顏色沒有多種點選事件則下面的方式也許更合適

Stringstr="預設顏色<font color='#FF0000'>紅顏色</font>";tv.setTextSize(18);tv.setText(Html.fromHtml(str));