美文网首页
android TextView 复习

android TextView 复习

作者: 宁静世界 | 来源:发表于2016-12-04 00:36 被阅读0次

    写在前面的话

    对于TextView,我想大家都已经熟的不能再熟了。但是它的用法我们真的熟么?

    TextView设置基础
    字符串资源里变量替换
    Android开发中是拒绝硬编码的,我们可能会把一些字符串放在xml中当作资源使用,假设有如下情况:

    <string name="welcome">你好A,欢迎使用我们的App。</string>
    

    我们在程序中需要使用这个字符串,但是A是一个变量,很常规的办法是取出这个字符串,然后用String的replace方法把A替换成用户的昵称。
    其实,在android中有这样一个东西,那就是 XLIFF,全称叫 XML 本地化数据交换格式,英文全称 XML Localization Interchange File Format。
    用法也是很简单的,如

    <string name="welcome">你好%1$s,欢迎使用我们的App。</string>
    

    程序中只要给变量赋值就可以了,如

    String welcome = getString(R.string.welcome, "小丸子");
    

    把字符串打印出来如下

    Paste_Image.png

    这里的1代表第一个变量,多个变量的话依次递增即可。

    TextView中设置多种字体大小
    比如在项目中经常遇到如下UI,

    TmmIXah
    像这样的两种字体大小放到一个TextView中,我们应该如何处理呢?需要用到 android.text 命名空间下的一些与 spannable相关的类和接口。如下:
    String text = "您已经连续走了5963步";
    int start = text.indexOf('5');
    int end = text.length();
    Spannable textSpan = new SpannableStringBuilder(text);
    textSpan.setSpan(new AbsoluteSizeSpan(16), 0, start, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    textSpan.setSpan(new AbsoluteSizeSpan(26), start, end - 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    textSpan.setSpan(new AbsoluteSizeSpan(16), end - 1, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    TextView textView = (TextView) findViewById(R.id.text);
    textView.setText(textSpan);
    

    代码中的设置方式:setAutoLinkMask(int)。

    参数和上边列表对应,分别为:Linkify.WEB_URLS,Linkify.EMAIL_ADDRESSES,Linkify.PHONE_NUMBERS,Linkify.MAP_ADDRESSES,Linkify.ALL

    但是需要注意的是,当我们需要定制超链接的跳转时应该怎么做?答案是还是选择Spannable。代码如下:

    //将TextView的显示文字设置为SpannableString
    testText.setText(getClickableSpan());
    //设置该句使文本的超连接起作用
    testText.setMovementMethod(LinkMovementMethod.getInstance());
    
    //设置超链接文字
    private SpannableString getClickableSpan() {
        SpannableString spanStr = new SpannableString("使用该软件,即表示您同意该软件的使用条款和隐私政策");
        //设置下划线文字
        spanStr.setSpan(new UnderlineSpan(), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字的单击事件
        spanStr.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                startActivity(new Intent(MainActivity.this, UsageActivity.class));
            }
        }, 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字的前景色
        spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 16, 20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
        //设置下划线文字
        spanStr.setSpan(new UnderlineSpan(), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字的单击事件
        spanStr.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                startActivity(new Intent(MainActivity.this, PrivacyActivity.class));
            }
        }, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字的前景色
        spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
        return spanStr;
    }
    
    运行效果如下图:
    
    Paste_Image.png

    实现点击文字打电话,发邮件,跳转网页,发短信,发彩信,看地图

    testText2.setText(getClickableSpan());//设置该句使文本的超连接起作用   
    testText2.setMovementMethod(LinkMovementMethod.getInstance());
    
       private SpannableString getClickableSpan() {
            //tv_test2=他们叫我富文本,我能打电话,发邮件,跳转网页,发短信,发彩信,看地图,怕了吧,嘻嘻
            SpannableString spanStr = new SpannableString(getString(R.string.tv_test2));
            spanStr.setSpan(new URLSpan("tel:10010"), 11, 13, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//打电话
            spanStr.setSpan(new URLSpan("mailto:muqingxs@google.com"), 15, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //邮件
            spanStr.setSpan(new URLSpan("http://www.baidu.com"), 20, 22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //网络
            spanStr.setSpan(new URLSpan("sms:10010"), 24, 26, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //短信   使用sms:或者smsto:
            spanStr.setSpan(new URLSpan("mms:10010"), 28, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //彩信   使用mms:或者mmsto:
            spanStr.setSpan(new URLSpan("geo:31.075758,121.503256"), 32, 34, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);     //地图
    
    //        设置下划线文字
            spanStr.setSpan(new UnderlineSpan(), 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            spanStr.setSpan(new AbsoluteSizeSpan(20,true), 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //设置文字的单击事件
            spanStr.setSpan(new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    ToastUtils.showToast(MainActivity.this, "我好怕怕");
                }
            }, 35, 38, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            return spanStr;
        }
    }
    

    参考博客

    http://blog.csdn.net/xiangzilv1987/article/details/8212064
    http://android.jobbole.com/83961/

    相关文章

      网友评论

          本文标题:android TextView 复习

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