关于android中 SpannableString 在TextView EditText 中的一些文本效果的实现i

1.spannableString 基本使用

		String s ="我和我的小伙伴们惊呆了!";		
		// u-underline i -italic b - bold
		text0.setText(Html.fromHtml("<u>"+s+"</u>"));   //下面有下标
		text1.setText(Html.fromHtml("<b>"+s+"</b>"));   //粗体
		text2.setText(Html.fromHtml("<i>"+s+"</i>"));   //斜体
		text3.setText(Html.fromHtml("<a href=\'http://www.google.com\'>"+ s +"</a>" )); //超连接

		//如果要在 Strings 里面直接设置的话  需要转义	
		//例如
		//<resources>
	    //<string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string>
	    //</resources>
		//因为fromHtml(String)方法会格式化所有的HTML内容,所以要确保用htmlEncode(String)对带格式化文本的字符串内所有可能的HTML字符进行转义。
		//比如,如果要把可能包含诸如“<”或“&”等字符的串作为参数传给String.format(),那么必须在格式化之前对这些字符进行转义。格式化后,再把字符串传入fromHtml(String),这些特殊字符就能还原成本来意义了。例如:
		//String escapedUsername = TextUtil.htmlEncode(username)
		//Resources res = getResources();
		//String text = String.format(res.getString(R.string.welcome_messages), escapedUsername,mailCount);
		//CharSequence styledText = Html.fromHtml(text);

     
		
		//Spannable -(翻译 :生成) 
        SpannableString ss = new SpannableString( "绿色打电话粗体删除线红色下划线图片:.斜体背景阴影");                   
        
        //字体颜色
        ss.setSpan(new ForegroundColorSpan(Color.GREEN), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       
        //电话- 链接
        ss.setSpan(new URLSpan("tel:4155551212"), 2, 5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //粗体
        ss.setSpan(new StyleSpan(Typeface.BOLD), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //删除线
        ss.setSpan(new StrikethroughSpan(), 7, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        //红色下划线
        ss.setSpan(new UnderlineSpan(), 10, 16,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        ss.setSpan(new ForegroundColorSpan(Color.RED), 10, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
       
        //设置图片
        Drawable d = getResources().getDrawable(R.drawable.ic_launcher); 
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); 
        ss.setSpan(span, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);      //放入图片

        //斜体
        ss.setSpan(new StyleSpan(Typeface.ITALIC), 19, 21, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //背景阴影
        ss.setSpan(new BackgroundColorSpan(Color.YELLOW), 21, 25, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        
        //text 和  EditText 同样适用
        text4.setText(ss);
        text4.setMovementMethod( LinkMovementMethod.getInstance());
        
        edittext5.setText(ss);
        edittext5.setMovementMethod( LinkMovementMethod.getInstance());
        edittext5.setBackgroundResource(android.R.drawable.editbox_background_normal);

        
        
        /** Text6 的阴影效果
         * 
         * 	android:textSize="28sp"
			android:textStyle="bold"
			android:textColor="#FFFFFF"
			android:shadowColor="#ff000000"   //阴影颜色 
			android:shadowDx="2"             //阴影x偏移量
			android:shadowDy="2"             //Y偏移量
			android:shadowRadius="1"/>       //阴影的范围
         --------------------------------------------------------
			或者设置 style
	    <resources>  
	         <style name="StyleBarTitle">
		     <item name="android:layout_gravity">center_vertical</item>
		     <item name="android:layout_width">0dp</item>
		     <item name="android:layout_height">wrap_content</item>
		     <item name="android:layout_weight">1</item>
		     <item name="android:gravity">center_horizontal</item>
		     <item name="android:textSize">@dimen/text_size_vlarge</item>
		     <item name="android:textStyle">bold</item>
		     <item name="android:textColor">#FFFFFF</item>
		     <item name="android:shadowColor">#ff000000</item>
		     <item name="android:shadowDx">2</item>
		     <item name="android:shadowDy">2</item>
		     <item name="android:shadowRadius">1</item>
		     <item name="android:background">@null</item>
             </style>
        </resources>
        
         */

我们知道要让TextView解析和显示Html代码。可以使用

Spanned text = Html.fromHtml(source);
tv.setText(text);

来实现,这个用起来简单方便。
但是,怎样让TextView也显示Html中节点的图像呢?
我们可以看到fromHtml还有另一个重构:
fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
实现一下ImageGetter就可以让图片显示了:
ImageGetter imgGetter = new Html.ImageGetter() {
             @Override
             public Drawable getDrawable(String source) {
                   Drawable drawable = null;
                   drawable = Drawable.createFromPath(source);  // Or fetch it from the URL
                   // Important
                   drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
                                 .getIntrinsicHeight());
                   return drawable;
             }
};

至于TagHandler,我们这里不需要使用,可以直接传null。


2. Android TextView 支持的HTML标签


<a href="...">     超链接
<b>                黑体字
<big>              字体变大
<small> 
<blockquote>       从两边缩进文本
<br>               换行
<cite>             引用,通常是斜体        
<dfn>              述语定义
<div align="...">
<em>               强调文本(通常是斜体加黑体)
<font size="..." color="..." face="...">
<h1>              最大标题
<h2>
<h3>
<h4>
<h5>
<h6>
<i>               斜体字 
<img src="...">
<p>创建一个段落              <p align=""> 将段落按左、中、右对齐      
<strike>          加删除线
<strong>          加重文本(通常是斜体加黑体)
<sub>             下标字
<sup>              上标字
<tt>               打字机风格的字体
<u>               下划线


/**
	 * 字符串处理
	 * @param str
	 * @return
	 */
	public static CharSequence makeMustHtml(CharSequence str) {

		return Html.fromHtml(str + "<font color=#ff0000>*</font>");
	}

	/**
	 * 使字符串大写
	 * @param str
	 * @return
	 */
	public static String bigfont(String str){
		StringBuilder stringBuilder = new StringBuilder();
		stringBuilder.append("<big>");
		stringBuilder.append(str);
		stringBuilder.append("</big>");
		return stringBuilder.toString();		
	}
	
	
	/**
	 * 显示连接
	 * @param str
	 * @return
	 */
	public static  String  showLink(String url,String str){
		
		url = "http://www.google.com";
		return "<a href=\" "+ url +  "\">"+ str +"</a> " ;
          
	}
	


3. 当然了现在 android上你还想实现一些特殊的字体以增加友好度,但是如果都做图的话 明显会增加apk的体积,其实很简单,将你电脑上

C:\Windows\Fonts  里面的字体库  拿过来用就好啦。



代码

	//得到AssetManager
		AssetManager aa = getAssets();
		//根据路径得到Typeface
		Typeface tf=Typeface.createFromAsset(aa, "fonts/STCAIYUN.TTF");
		//设置字体
		tt.setTypeface(tf);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

空白的泡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值