Android TextView设置个别字体样式
TextView进一步深化:
通过查询资料,了解到格式化文字的方式主要分为两大类:
第一类:HTML标签格式化文字
代码比較简单。例如以下:
- import
android.app.Activity; - import
android.os.Bundle; - import
android.text.Html; - import
android.widget.TextView; -
- public
class AndroidFronColorTest extendsActivity { -
-
void onCreate(Bundle savedInstanceState) { -
-
-
setContentView(R.layout.main); -
-
TextView htmlFormateTextView = (TextView)findViewById(R.id.testTextView); -
-
String source = color='red'>红色字</font>的格式" ; -
-
htmlFormateTextView.setText(Html.fromHtml(source)); -
} - }
第二类通过SpannableString进行格式化操作:
- public
class TextViewLinkActivity extendsActivity { -
TextView mTextView = null; -
SpannableString msp = null; -
-
-
@Override -
public void onCreate(Bundle savedInstanceState) { -
super.onCreate(savedInstanceState); -
setContentView(R.layout.main); -
-
mTextView = (TextView)findViewById(R.id.myTextView); -
-
//创建一个 SpannableString对象 -
msp = new SpannableString( "字体測试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件站点短信彩信地图X轴综合"); -
-
//设置字体(default,default-bold,monospace,serif,sans-serif) -
msp.setSpan(new TypefaceSpan( "monospace"),0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); -
msp.setSpan(new TypefaceSpan( "serif"),2, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); -
-
//设置字体大小(绝对值,单位:像素) -
msp.setSpan(new AbsoluteSizeSpan( 20),4, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); -
msp.setSpan(new AbsoluteSizeSpan( 20,true),6, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //第二个參数booleandip,假设为true。表示前面的字体大小单位为dip,否则为像素。同上。 -
-
//设置字体大小(相对值,单位:像素) 參数表示为默认字体大小的多少倍 -
msp.setSpan(new RelativeSizeSpan( 0.5f),8, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //0.5f表示默认字体大小的一半 -
msp.setSpan(new RelativeSizeSpan( 2.0f),10, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体大小的两倍 -
-
//设置字体前景色 -
msp.setSpan(new ForegroundColorSpan(Color.MAGENTA), 12,15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置前景色为洋红色 -
-
//设置字体背景色 -
msp.setSpan(new BackgroundColorSpan(Color.CYAN), 15,18, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //设置背景色为青色 -
-
//设置字体样式正常,粗体,斜体,粗斜体 -
msp.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 18,20, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //正常 -
msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 20,22, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗体 -
msp.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 22,24, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //斜体 -
msp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 24,27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //粗斜体 -
-
//设置下划线 -
msp.setSpan(new UnderlineSpan(), 27,30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); -
-
//设置删除线 -
msp.setSpan(new StrikethroughSpan(), 30,33, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); -
-
//设置上下标 -
msp.setSpan(new SubscriptSpan(), 34,35, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //下标 -
msp.setSpan(new SuperscriptSpan(), 36,37, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //上标 -
-
//超级链接(须要加入setMovementMethod方法附加响应) -
msp.setSpan(new URLSpan( "tel:4155551212"),37, 39, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //电话 -
msp.setSpan(new URLSpan( "mailto:webmaster@google.com"),39, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //邮件 -
msp.setSpan(new URLSpan( "http://www.baidu.com"),41, 43, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //网络 -
msp.setSpan(new URLSpan( "sms:4155551212"),43, 45, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //短信使用sms:或者smsto: -
msp.setSpan(new URLSpan( "mms:4155551212"),45, 47, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //彩信使用mms:或者mmsto: -
msp.setSpan(new URLSpan( "geo:38.899533,-77.036476"),47, 49, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //地图 -
-
//设置字体大小(相对值,单位:像素) 參数表示为默认字体宽度的多少倍 -
msp.setSpan(new ScaleXSpan( 2.0f),49, 51, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变 -
//SpannableString对象设置给TextView -
myTextView.setText(sp); -
-
myTextView.setMovementMethod(LinkMovementMethod.getInstance()); -
} - }
- 在使用SpannableString对象时要注意
- Spanned.SPAN_EXCLUSIVE_EXCLUSIVE等的作用:
- 用来标识在 Span 范围内的文本前后输入新的字符时是否把它们也应用这个效果。分别有Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包含)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包含。后面不包含)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包含,后面包含)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包含)。