美文网首页Android开发经验谈Android开发那些年爬过坑
Android Textview 动态 部分文字点击 改变颜

Android Textview 动态 部分文字点击 改变颜

作者: 老去的九零后青年 | 来源:发表于2018-11-02 16:32 被阅读30次

    最近现在项目中遇到了一个需求 ,就是部分文字可以点击和改变颜色 ,这其实还是ok的  不是什么变态需求  因为也没有做过   我感觉textview 自己就会有实现此需求的办法   一百度还真有

    废话不多说  开始上代码

    public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    TextView tv = findViewById(R.id.tvContent);

            final SpannableStringBuilder style = new SpannableStringBuilder();

    //设置文字

    style.append("如果你真的喜欢我,请疯狂的点击我把");

    //设置部分文字点击事件

    ClickableSpan clickableSpan = new ClickableSpan() {

    @Override

    public void onClick(View widget) {

    Toast.makeText(MainActivity.this, "触发点击事件!", Toast.LENGTH_SHORT).show();

    }

    };

    style.setSpan(clickableSpan, 10, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    tv.setText(style);

    //设置部分文字颜色

    ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0000FF"));

    style.setSpan(foregroundColorSpan, 10, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    //配置给TextView

    tv.setMovementMethod(LinkMovementMethod.getInstance());

    tv.setText(style);

    }

    }

    但是这样写的话确实很快实现了该效果

    但是复用性不是很高 而且我现在不知道后台返给我的具体的String是什么  只知道点击的是确定的 所以我有进一步的优化了这个方法

    /**

    *

        * @author 大圣

        * @time 2018/10/17 下午3:51

        * @param content 全部的文本

        * @param str  点击文本

        * @param len  点击文本的长度

        * @param textView 组件textview

        * @param mListeners 接口回调

        * @param type  分辨是哪个

    */

        private void callService(String content, String str,int len , TextView textView ,final MyDialogListener mListeners ,final int type) {

    SpannableStringBuilder builder =new SpannableStringBuilder(content);

    int i = content.indexOf(str);//截取文字开始的下标

            builder.setSpan(new ClickableSpan() {

    @Override

                public void onClick(View widget) {

    //点击后的操作

                    if (type ==1) {

    mListeners.onClicktoH5();

    }

    if (type ==2) {

    mListeners.onClicktoMy();

    }

    //                CommonUtils.call(mContext, "12351");

                }

    @Override

                public void updateDrawState(TextPaint ds) {

    super.updateDrawState(ds);

    ds.setColor(Color.parseColor("#0000FF"));//设置文字颜色

                    ds.setUnderlineText(true);//设置下划线//根据需要添加

                }

    }, i, i + len, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    textView.setText(builder);

    textView.setMovementMethod(LinkMovementMethod.getInstance());

    }

    嘻嘻 这个方法是我自己优化过后的  具体的传参注释也有   菜鸟亦可以明白其中的逻辑   也可以根据自己的需求来改  嘻嘻 都半年多没有写博客了   我又开始强势的回归了

    相关文章

      网友评论

        本文标题:Android Textview 动态 部分文字点击 改变颜

        本文链接:https://www.haomeiwen.com/subject/oroyzftx.html