TextView使用实例

第一次发文章好紧张哦,一定要我。

一、引用

1、TextView实战之你真的懂我么?
2、Android TextView 添加下划线的几种方式
3、Android在一个TextView里显示不同样式的字体
4、盘点Android使用自定义字体遇到的坑
5、Android应用使用第三方字体

二、实例

1、完全靠xml布局实现的各式文字样式(超链接,下划线,滚动,阴影,拉伸,粗体斜体,图片加载)

图例:
TextView使用实例_第1张图片
tv-1.png

xml:


        

            
            
            

            
            

            

            
            

            

            

            

            

            
            


        

2、textview和string.xml的部分使用(格式化文字和string-array)

图例:
TextView使用实例_第2张图片
tv-2.png

xml:


        

            

            

            

        

string.xml等:


    
        组件
        控件
        数据库
        通信
        多媒体
        文件
        设备
    

测试StringFormat:StringArray有%d个数据=%s,可测试Float=%2f

代码:

/**
     * 测试string.xml的使用
     * XLIFF,全称叫 XML 本地化数据交换格式,英文全称 XML Localization Interchange File Format
     * */
    private void testStringXml(){
        //normal
        tv_string.setText(R.string.textview_string);

        //super
        String[] array_string = getResources().getStringArray(R.array.android_study_modules);
        LogUtil.i("array_string.length="+array_string.length+",content="+ Arrays.toString(array_string));

        String format_string = getString(R.string.textview_string_format);
        LogUtil.i("format_string org = "+format_string);
        format_string = String.format(format_string,array_string.length,Arrays.toString(array_string),3.333f);
        LogUtil.i("format_string java code = "+format_string);
        tv_string_format.setText(format_string);

        format_string = getString(R.string.textview_string_format,array_string.length,Arrays.toString(array_string),3.333f);
        LogUtil.i("format_string android code = "+format_string);
        tv_string_format.setText(format_string);
    }

3、代码实现各种文字样式(SpannableString的运用,文字内部超链接,下划线,滚动,阴影,拉伸,粗体斜体,图片加载,第三方字体,奇奇怪怪的文字)

图例:
TextView使用实例_第3张图片
tv-3.png

xml:


        

            

            

            

            

            

            

            

            


        

代码:

/**
     * 测试斜体
     * 貌似必须加上MONOSPACE,否则中文字无法斜体
     * */
    private void testItalic(){
        String aaa = tv_code_italic.getText().toString();

        /*方法1:全部是斜体粗体*/
        tv_code_italic.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);

        /*方法2:部分斜体(中文字的话没法斜体)*/
        //SpannableString spn = new SpannableString(aaa);
        //what,start,end,flag
        //spn.setSpan(spn,0,3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        //tv_code_italic.setText(spn);

        /*方法3:使用画笔(中文字的话没法斜体)*/
        //tv_code_italic.getPaint().setFakeBoldText(true);

    }

    /**
     * 测试中划线/下划线
     * */
    private void testTxtLine(){
        /*方法1:paint : STRIKE_THRU_TEXT_FLAG=中划线(删除线) , UNDERLINE_TEXT_FLAG=下划线*/
        tv_code_bottom_line.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);//getPaint().setFlags();
        tv_code_bottom_line.getPaint().setAntiAlias(true);//抗锯齿

        /*方法2:html标签类文字*/
        //String htmlString = "我是html下划线";
        //tv_code_bottom_line.setText(Html.fromHtml(htmlString));

        /*方法3:SpannablString类,一般用于某个文字下划线*/
        //String spanString = "我是spna文字,啦啦1234";
        //SpannableString content = new SpannableString(spanString);
        //content.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
        //tv_code_bottom_line.setText(content);
    }

    /**
     * 测试autoLink内容
     * none|web|phone|mail|map
     * */
    private void testAutoLink(){
        /*固定的 autolink all*/
        final String contact = "Email: [email protected]\n" +
                "Phone: 189111111111\n" +
                "Fax: +47-12345678\n" +
                "HTTP: http://www.baidu.com";
        tv_code_autolink.setAutoLinkMask(Linkify.ALL); // or set 'android:autoLink' in layout xml
        tv_code_autolink.setText(contact);

        /*定制的 autolink all*/
        //将TextView的显示文字设置为SpannableString
        tv_code_autolink2.setText(getClickableSpan());
        //设置该句使文本的超连接起作用
        tv_code_autolink2.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));
                ToastUtil.showShort(instance,"点击了使用条款");
            }
        }, 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));
                ToastUtil.showShort(instance,"点击了隐私政策");
            }
        }, 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //设置文字的前景色
        spanStr.setSpan(new ForegroundColorSpan(Color.GREEN), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        return spanStr;
    }

    /**
     * 测试第三方asset中字体
     * 如果全局引用第三方字体两种比较好方式
     * 1、MyApplication通过反射定义此typeface,然后在theme中引用,然后套用此theme
     *    优化一点,可以通过注解+反射的方式,类似bufferfly框架中
     * 2、各种自定义控件中属性使用新typeface
     * 3、单个使用慢慢设置...
     *
     * 全局使用请看HelloApp.java这个Application文件
     * */
    private void testAssetFont(){
        //maybe exception
        Typeface ttf = Typeface.createFromAsset(getAssets(),"fonts/SIMKAI.TTF");
        tv_code_asset.setTypeface(ttf);
    }

    /**
     * 测试同一段文字显示乱七八糟有趣的
     * 主要是SpannableString
     * */
    private void testFunnyTextView(){
        String funnyString = tv_code_fun_style.getText().toString();
        SpannableString spna = new SpannableString(funnyString);
        // 字体颜色
        spna.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        // 背景色
        spna.setSpan(new BackgroundColorSpan(Color.RED), 2, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        // 粗体
        spna.setSpan(new StyleSpan(Typeface.BOLD), 4, 6, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        // 字体大小
        spna.setSpan(new AbsoluteSizeSpan(50), 6, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        // 下划线
        spna.setSpan(new URLSpan(""), 8, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        // 删除线(中划线)
        spna.setSpan(new StrikethroughSpan(), 10, 12, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        // 胖瘦字体
        spna.setSpan(new ScaleXSpan(2.0f), 12, 13, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        spna.setSpan(new ScaleXSpan(0.5f), 13, 14, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        // 显示
        tv_code_fun_style.setText(spna);
    }

    /**
     * 测试用代码输出风格迥异的文字
     * 设置各种尺寸要用到sp,dp和px,最多是px
     * */
    private void testTextViewCode(){

        //设置背景色,其他:setBackgroundResource(resid),setBackground(drawable)
        tv_code_diff_style.setBackgroundColor(AppUtil.getColor(instance,R.color.wx_blue));
        //设置字体颜色
        tv_code_diff_style.setTextColor(Color.WHITE);
        //设置大小
        tv_code_diff_style.setTextSize(18f);//默认用的sp为单位,不需要修改
        //设置宽度:非固定高度的,设置match_parent等需要从他父控件的param开始设置
        //tv_code_diff_style.setWidth(100);//pix
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        //params.width = 100;params.height=100;params.weight=1;
        tv_code_diff_style.setLayoutParams(params);
        //设置居中
        tv_code_diff_style.setGravity(Gravity.CENTER);
        //设置最低高度
        tv_code_diff_style.setMinHeight(DisplayUtil.dip2px(instance,30f));//pix
        //设置内距
        tv_code_diff_style.setPadding(10,10,10,10);
        //设置拉伸_文字间隔
        tv_code_diff_style.setScaleY(1.2f);//setScaleX
        //设置阴影
        tv_code_diff_style.setShadowLayer(2.5f,15f,5f,Color.RED);
        //设置斜体粗体
        tv_code_diff_style.setTypeface(Typeface.MONOSPACE,Typeface.BOLD_ITALIC);
        //设置加载图片
        Drawable drawable= getResources().getDrawable(R.mipmap.android_label);
        drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());//必有,不然不显示
        tv_code_diff_style.setCompoundDrawables(drawable,null,null,null);
    }

你可能感兴趣的:(TextView使用实例)