TextView使用一些小技巧

本文主要讲一些TextView的使用技巧

TextView使用频率很高,大家也都很熟悉,讲几个开发中比较实用的小属性

1、TextView竖行使用:

比较笨点的宽度设置一个字的大小,然后singLine设置false

那么比较好简单一点就是设置Textview的ems属性,即:

android:ems="1"(后面数字是一行显示的字符多少)

2、TextView链接点击:

比如你先要点击一个TextView,跳转到某个url,这样就可以给TextView设置

一个属性,即:android:autoLink (设置是否当文本为URL链接/email/电话

号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all))

3、TextView霓虹灯效果:

大家应该都知道跑马灯效果,就不赘述了,我讲一下霓虹灯的效果吧

首先定义一个计时器,定时器用于定时发消息改变TextView字体颜色

Timer timer = new Timer();
TimerTask task_neon = new TimerTask() {
    public void run() {
        Message message = new Message();
        message.what = 1;
        handler.sendMessage(message);
    }
};
然后定义一个Handler,在这里面实现霓虹灯效果(也就是字体颜色改变)
handler = new Handler() {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    // 霓虹灯效果
                    TextView tv = (TextView) findViewById(R.id.text);
                    String neontext = content;
                    String notext = "重新键入";
                    String playtext = "";
                    if(flag){
                        playtext = "暂停";
                    }else{
                        playtext = "重播";
                    }
                    int len = neontext.length();
                    List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
                    List<Map<String, Object>> data1 = new ArrayList<Map<String, Object>>();
                    List<Map<String, Object>> data2 = new ArrayList<Map<String, Object>>();
                    for (int i = 0; i < len; i++) {
                        Map<String, Object> target = new HashMap<String, Object>();
                        target.put("content", neontext.substring(i, i + 1));
                        target.put("color", setColor());
                        data.add(target);
                    }
                    for (int i = 0; i < 4; i++) {
                        Map<String, Object> target = new HashMap<String, Object>();
                        target.put("content", notext.substring(i, i + 1));
                        target.put("color", setColor());
                        data1.add(target);
                    }
                    for (int i = 0; i < 2; i++) {
                        Map<String, Object> target = new HashMap<String, Object>();
                        target.put("content", playtext.substring(i, i + 1));
                        target.put("color", setColor());
                        data2.add(target);
                    }
                    tv.setText(Utils.highlight(neontext, data));
                    sumbit.setText(Utils.highlight(notext, data1));
                    pause.setText(Utils.highlight(playtext, data2));
                    break;
            }
            super.handleMessage(msg);
        }
    };

    timer.schedule(task_neon, 1000, 1000);
}
主要霓虹灯效果是使用Spannable实现的:

public static SpannableStringBuilder highlight(String wholeContent,
                                               List<Map<String, Object>> data) {
    SpannableStringBuilder spannable = new SpannableStringBuilder(
            wholeContent);

    for (Map<String, Object> targetdata : data) {
        Pattern p = Pattern.compile(targetdata.get("content").toString());
        Matcher m = p.matcher(wholeContent);
        while (m.find()) {
            spannable.setSpan(
                    new ForegroundColorSpan(Integer.valueOf(targetdata.get("color").toString())),
                    m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
    }
    return spannable;
}

还有其他的好属性可以私信我哦,谢谢啦!
个人邮箱:jsmeli@163.com



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值