• [置顶] Android EditText/TextView使用SpannableString显示复合文本


             在Android中EditText用于编辑文本,TextView用于显示文本,但是有时候我们需要对其中的文本进行样式等方面的设置。Android为我们提供了SpannableString类来对指定文本进行处理。

    1) ForegroundColorSpan        文本颜色

    private void setForegroundColorSpan() {  
        SpannableString spanString = new SpannableString("前景色");  
        ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);  
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    }  


    2) BackgroundColorSpan文本背景色 

    private void setBackgroundColorSpan() {  
        SpannableString spanString = new SpannableString("背景色");  
        BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);  
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    } 

    3) StyleSpan         字体样式:粗体、斜体等

    private void setStyleSpan() {  
        SpannableString spanString = new SpannableString("粗体斜体");  
        StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);  
        spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    }  

    4) RelativeSizeSpan         相对大小

    private void setRelativeFontSpan() {
    	SpannableString spanString = new SpannableString("字体相对大小");
    	spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    	tv.append(spanString);    
    }

    5) TypefaceSpan         文本字体

    private void setTypefaceSpan() {
    	SpannableString spanString = new SpannableString("文本字体");
    	spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    	tv.append(spanText);
    }


    6) URLSpan 文本超链接

    private void addUrlSpan() {  
        SpannableString spanString = new SpannableString("超链接");  
        URLSpan span = new URLSpan("http://www.baidu.com");  
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    }  


    7) ImageSpan         图片

    private void addImageSpan() {  
        SpannableString spanString = new SpannableString(" ");  
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher);  
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());  
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);  
        spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    } 

    8) ClickableSpan                 文本有点击事件

    private TextView textView;
    textView = (TextView)this.findViewById(R.id.textView);
    String text = "显示Activity";
    SpannableString spannableString = new SpannableString(text);
    spannableString.setSpan(new ClickableSpan() {
    	@Override
    	public void onClick(View widget) {
    		Intent intent = new Intent(Main.this,OtherActivity.class);
    		startActivity(intent);
    	}
    	// 表示点击整个text的长度都有效触发这个事件
    }, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    textView.setText(spannableString);
    textView.setMovementMethod(LinkMovementMethod.getInstance());


    9) UnderlineSpan         下划线

    private void addUnderLineSpan() {  
        SpannableString spanString = new SpannableString("下划线");  
        UnderlineSpan span = new UnderlineSpan();  
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    } 

    10) StrikethroughSpan         删除线

    private void addStrikeSpan() {  
        SpannableString spanString = new SpannableString("删除线");  
        StrikethroughSpan span = new StrikethroughSpan();  
        spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        tv.append(spanString);  
    }  


    11) SuggestionSpan 相当于占位符

    12) MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)

    13) RasterizerSpan         光栅效果

    14) AbsoluteSizeSpan         绝对大小(文本字体)

    private void setAbsoluteFontSpan() {
    		SpannableString spannableString = new SpannableString("40号字体");
    		AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40);
    		spannableString.setSpan(absoluteSizeSpan, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    		editText.append(spannableString);
    }

    15) DynamicDrawableSpan    设置图片,基于文本基线或底部对齐。

    16) TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)

    private void setTextAppearanceSpan() {
    	SpannableString spanString = new SpannableString("文本外貌");
    	TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium);
    	spanString.setSpan(textAppearanceSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    	tv.append(spanString);
    }
  • 相关阅读:
    [BZOJ2324][ZJOI2011]营救皮卡丘
    P4324 [JSOI2016]扭动的回文串
    P5068 [Ynoi2015]我回来了
    P4412 [SHOI2004]最小生成树
    bzoj3118: Orz the MST(线性规划+单纯形法)
    bzoj3265: 志愿者招募加强版(线性规划+单纯形法)
    bzoj3550: [ONTAK2010]Vacation(单纯形法+线性规划)
    uoj#179. 线性规划
    P2093 [国家集训队]JZPFAR(KDTree)
    P3538 [POI2012]OKR-A Horrible Poem
  • 原文地址:https://www.cnblogs.com/james1207/p/3281427.html
Copyright © 2020-2023  润新知