图文混排

//SpannableString 不需要导入任何的依赖
public class MainActivity extends AppCompatActivity {

    private TextView textview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textview = (TextView) findViewById(R.id.textview);
        String icon = "icon";
        String from = "张全蛋";
        String to = "赵铁柱";
        String txt = String.format("%s回复@%s:我是富士康3号%s流水线的张全蛋," +
                "英文名叫Micheal Jack,发文名叫helodie Jaqueline。", from, to, icon);

        //实例化对象
        SpannableString spannable = new SpannableString(txt);
        //点击事件,好像无效,自行百度
        spannable.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }, txt.indexOf(icon), txt.indexOf(icon) + icon.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        //修改文字颜色
        spannable.setSpan(new ForegroundColorSpan(Color.parseColor("#ff0000")), txt.indexOf(icon), txt.indexOf(icon) + icon.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字背景颜色
        spannable.setSpan(new BackgroundColorSpan(Color.parseColor("#ffff00")), txt.indexOf(from), txt.indexOf(from) + from.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //用图片替换文字
        //bitmap 格式工厂拿到图片
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.am6);
        //把图片设置成Drawable格式
        BitmapDrawable drawable = new BitmapDrawable(getResources(), bitmap);
        //设置图片的边界,也可以理解成图片的大小,后两个参数也可以设置成数字,比如10,20或20,20
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        //把图片设置到指定位置
        spannable.setSpan(new ImageSpan(drawable), txt.indexOf(icon), txt.indexOf(icon) + icon.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字样式,这里是加粗
        spannable.setSpan(new StyleSpan(Typeface.BOLD), txt.indexOf(to), txt.indexOf(to) + to.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //添加下划线
        spannable.setSpan(new UnderlineSpan(), txt.indexOf(to), txt.indexOf(to) + to.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //最后把这些都设置到TextView上面
        textview.setText(spannable);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值