android给部分文字添加下滑线, 点击功能

项目中遇到需要给一段方案中的几个字加下滑线,并且点击这几个文字,跳转到另一个页面的功能。

不多说了,直接上代码。

第一步,创建工具类。 TextViewSpannableUtils.java

public class TextViewSpannableUtils {
    private static ClickableSpanCallBack mClickableSpanCallBack;

    public TextViewSpannableUtils() {
    }

    /****
     *  1. 给部分文字加超链接功能,
     *  2. 给部分文字添加下滑线, 点击功能
     *  3. 设置文字高亮
     *  4. 给部分文字设置背景色
     * @param  content:文字内容。   keyWord :关键字,要加下滑线的几个字。  resColorID: 要给这几个字设置的颜色。
textView  布局控件。
     */
    public static void setSpannable(String content,String keyWord , int resColorID, TextView textView) {
//        SpannableStringBuilder builder = new SpannableStringBuilder(content);
//        int start = content.indexOf("免责声明");//截取文字开始的下标
        int start = content.indexOf(keyWord);//截取文字开始的下标
        int totalLength = content.length();
        LogUtils.e("setSpannable ------------- start: " + start);
        LogUtils.e("setSpannable ------------- totalLength: " + totalLength);
        if (start<0){
            if (StringUtils.isNotBlank(content)){
                textView.setText(content);
            }else {
                textView.setText("");
            }
            return;
        }
        //创建一个 SpannableString对象
//        SpannableString sp = new SpannableString("这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体.");
        SpannableString sp = new SpannableString(content);
        // 关键字点击事件
        sp.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                //点击后的操作
                LogUtils.e("setSpannable 点击后的操作 -------------");
                if (mClickableSpanCallBack != null){
                    mClickableSpanCallBack.onClick();
                }
            }
        }, start, totalLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置超链接
//        sp.setSpan(new URLSpan("http://www.baidu.com"), 5, 7,  Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置高亮样式一
//        sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置字体背景高亮样式二
//        sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        // 设置下滑线
        sp.setSpan(new StyleSpan( Paint.UNDERLINE_TEXT_FLAG),start ,totalLength,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        //设置字体高亮样式二
//        sp.setSpan(new ForegroundColorSpan(MyApplication.getContext().getResources().getColor(R.color.color_333333) ),
//        sp.setSpan(new ForegroundColorSpan(Color.BLACK ),  start,totalLength,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        //设置字体前景色    Color.MAGENTA  洋红色
//        sp.setSpan(new ForegroundColorSpan(Color.BLACK), start, totalLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置斜体
//        sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
        //设置字体前景色    Color.MAGENTA  洋红色    color_1A66D0   R.color.color_2982FF
        sp.setSpan(new ForegroundColorSpan(  resColorID), start, totalLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//        sp.setSpan(new ForegroundColorSpan(Color.BLACK), start, totalLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
//        sp.setSpan(new ForegroundColorSpan(MyApplication.getContext().getResources().getColor(R.color.color_1A66D0)),
//                start, totalLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //SpannableString对象设置给TextView
        textView.setText(sp);
        //设置TextView可点击
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    }

 

    public void setClickableSpanCallBack(ClickableSpanCallBack clickableSpanCallBack) {
        this.mClickableSpanCallBack = clickableSpanCallBack;
    }

    public interface ClickableSpanCallBack{
        void onClick();
    }
}

 

第二步、 写布局文件,就是普通的 TextView布局。

 

第三步、 在代码中调用工具类。

    private void initView() {
     
        mDisclaimerTV = mActivity.findViewById(R.id.self_diagnosis_result_disclaimer_TV);           // 免责声明按钮


        TextViewSpannableUtils spannableUtils = new TextViewSpannableUtils();
        spannableUtils.setClickableSpanCallBack(mClickableSpanCallBack);
//        spannableUtils.setSpannable("1.通过医学知识库人体各系统综合诊断,您的伴有症状与之匹配越多,排列越靠前,患有该疾病的可能性越大。\n" +
//                "2.自诊结果仅供参考,详情请咨询医生,若病情反复或加重,请及时就医! 免责声明" , "免责声明" , mDisclaimerTV);
        spannableUtils.setSpannable(mActivity.getString(R.string.self_diagnosis_result_Disclaimer_text)
                + mActivity.getString(R.string.self_diagnosis_result_Disclaimer_text_keyword)  ,
                mActivity.getString(R.string.self_diagnosis_result_Disclaimer_text_keyword) ,
                mActivity.getResources().getColor(R.color.color_2982FF),
                mDisclaimerTV);
        setResultUIData();
    }

    private TextViewSpannableUtils.ClickableSpanCallBack mClickableSpanCallBack
            = new TextViewSpannableUtils.ClickableSpanCallBack() {
        @Override
        public void onClick() {
            LogUtils.e("免责声明 点击后的操作 -------------");
            new StartActivityUtils(DisclaimerWebViewActivity.class);   // 免责声明 页面
        }
    };

第四步、运行一下吧,很简单的步骤。

 

关注公众号,了解更多精选文章吧。

 

 

你可能感兴趣的:(android开发)