Android實現部分文字可點擊及變色

可以使用SpannableString和ClickableSpan:

        TextView userAgreement = findViewById(R.id.user_agreement);
        SpannableString agreement = new SpannableString("Agree to the User Agreement and Privacy Policy");
        agreement.setSpan(new MyClickableSpan("User Agreement"), 13, 27, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
        agreement.setSpan(new MyClickableSpan("Privacy Policy"), 32, 46, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
        userAgreement.setText(agreement);
        userAgreement.setMovementMethod(LinkMovementMethod.getInstance());

上面代碼中setMovementMethod這一句是固定的,必須添加,否則點擊沒效果。這裏setSpan方法有四個參數:

//what:要加何種樣式或功能
//start:開始加樣式的位置
//end:結束加樣式的位置
//flags:是否包含開始和結束位置的字符
public void setSpan (Object what, int start, int end, int flags)

其中start參數和end參數的確定有個小技巧,就是Android Studio當你在源代碼窗格選擇了一段文字,底部狀態欄會自動出現字符個數,這樣省着一個一個數字符的麻煩。

MyClickableSpan代碼如下:

    static class MyClickableSpan extends ClickableSpan {

        private String text;

        public MyClickableSpan(String text) {
            this.text = text;
        }

        @Override
        public void onClick(@NonNull View view) {
            Toast.makeText(view.getContext(), text, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void updateDrawState(@NonNull TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(Color.parseColor("#ff3783"));
            ds.setUnderlineText(false);
        }
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章