热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

富文本显示

Xml文件中是3个textView代码实现publicclassMainActivityextendsActivity{OverridepublicvoidonCreate

Xml文件中是3个textView
代码实现
public class MainActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView mTextView1 = (TextView) findViewById(R.id.test1);
    TextView mTextView2= (TextView) findViewById(R.id.test2);
    TextView mTextView3 = (TextView) findViewById(R.id.test3);

    /**
    * 方法一 :
    * 通过SpannableString 设置
    * 介绍: SpannableString 与String差不多,但是可以通过setSpan()方法设置各种格式或者样式
    */
    String str="字体测试字体大小一半两倍前景色背景色正常粗体斜体粗斜体下划线删除线x1x2电话邮件网站短信彩信地图X轴综合/bot";
    // 创建一个 SpannableString对象
    SpannableString msp = new SpannableString(str);
    /**对字符设置样式: setSpan()有4个参数
    * what:object :设置样式的类型
    * start: 设置字符序列的起始点
    * end: 实战字符序列的结束点
    * flags :设置是否包含端点
    * Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含两端start和end所在的端点 (a,b)
    * Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含端start,但包含end所在的端点 (a,b]
    * Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含端start,但不包含end所在的端点 [a,b)
    * Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含两端start和end所在的端点 [a,b]
    */
    // 设置字体(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);
    // 第二个参数boolean dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
    msp.setSpan(new AbsoluteSizeSpan(20, true), 6, 8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体大小(相对值,单位:像素) 参数表示为默认字体大小的多少倍
    // 0.5f表示默认字体大小的一半
    msp.setSpan(new RelativeSizeSpan(0.5f), 8, 10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 2.0f表示默认字体大小的两倍
    msp.setSpan(new RelativeSizeSpan(2.0f), 10, 12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体前景色为洋红色
    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(Typeface.NORMAL), 18, 20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式粗体
    msp.setSpan(new StyleSpan(Typeface.BOLD), 20, 22,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式斜体
    msp.setSpan(new StyleSpan(Typeface.ITALIC), 22, 24,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体样式粗斜体
    msp.setSpan(new StyleSpan(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);
    // 短信 使用sms:或者smsto:
    msp.setSpan(new URLSpan("sms:4155551212"), 43, 45,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 彩信 使用mms:或者mmsto:
    msp.setSpan(new URLSpan("mms:4155551212"), 45, 47,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 地图
    msp.setSpan(new URLSpan("geo:38.899533,-77.036476"), 47, 49,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体大小(相对值,单位:像素) 参数表示为默认字体宽度的多少倍
    // 2.0f表示默认字体宽度的两倍,即X轴方向放大为默认字体的两倍,而高度不变
    msp.setSpan(new ScaleXSpan(2.0f), 49, 51,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置字体(依次包括字体名称,字体大小,字体样式,字体颜色,链接颜色)
    ColorStateList csllink = null;
    ColorStateList csl = null;
    msp.setSpan(new TextAppearanceSpan("monospace",
      android.graphics.Typeface.BOLD_ITALIC, 30, csl, csllink), 51,
      53, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置项目符号
    // 第一个参数表示项目符号占用的宽度,第二个参数为项目符号的颜色
    msp.setSpan(new BulletSpan(
      android.text.style.BulletSpan.STANDARD_GAP_WIDTH, Color.GREEN),
      0, msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    // 设置图片 获取图片资源
    Drawable drawable = getResources().getDrawable(R.drawable.smiley);
    //设置图片边界,即图片大小
    drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
    /**ImageSpan:图片样式
    * ALIGN_BASELINE:与基线对齐
    * ALIGN_BOTTOM:与EditText的底部对齐
    */
    ImageSpan imageSpan=new ImageSpan(drawable,ImageSpan.ALIGN_BOTTOM);
    msp.setSpan(imageSpan, 53, 57,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    mTextView1.setText(msp);
    //假如TextView或者EditText要支持点击链接,则 要设置该方法
    mTextView1.setMovementMethod(LinkMovementMethod.getInstance());

//方法2. 通过html标签 来设置 颜色 ,链接等
  String source1= "谷歌,苹果,微软, 华为,百度等32家大公司觉得很赞...";
  Spanned spanned1 = Html.fromHtml(source1);
  mTextView2.setMovementMethod(LinkMovementMethod.getInstance());
  mTextView2.setText(spanned1);
// 方法3.
  String source2= r("中国") + ","+g("美国")+",英国, 德国,"+getlink("日本", "http://www.qq.com")+"等"+r("32个国家")+"觉得很赞...";
  /**该接口继承了CharSequence接口
  * 用来标记要添加到区域中的对象
  * Spanned:格式化或者样式化
  */
  Spanned spanned2 = Html.fromHtml(source2);
  //假如TextView或者EditText要支持点击链接,则 要设置该方法
  mTextView3.setMovementMethod(LinkMovementMethod.getInstance());
  mTextView3.setText(spanned2);
  }
  //取颜色
  public static String r(String source){
    //对字符串设置格式 ,%s:占位符
    return String.format("%s", source);
  }
  //取颜色
  public static String g(String source){
    return String.format("%s", source);
  }
  //取链接
  public static String getlink(String linkText,String linkTarget){
    return String.format("%s", linkTarget,linkText);

  }


转载于:https://www.cnblogs.com/konekou/p/7699251.html


推荐阅读
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • Django 使用slug field时遇到的问题 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • springMVC JRS303验证 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 在尝试从数据库获取设置的过程中,遇到了一个致命错误:Fatal error: Call to a member function bind_param() on boolean。本文将详细分析该错误的原因,并提供解决方案。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • docker镜像重启_docker怎么启动镜像dock ... [详细]
  • Django Token 认证详解与 HTTP 401、403 状态码的区别
    本文详细介绍了如何在 Django 中配置和使用 Token 认证,并解释了 HTTP 401 和 HTTP 403 状态码的区别。通过具体的代码示例,帮助开发者理解认证机制及权限控制。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 当unique验证运到图片上传时
    2019独角兽企业重金招聘Python工程师标准model:public$imageFile;publicfunctionrules(){return[[[na ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 本文详细介绍了 Linux 系统中用户、组和文件权限的设置方法,包括基本权限(读、写、执行)、特殊权限(SUID、SGID、Sticky Bit)以及相关配置文件的使用。 ... [详细]
author-avatar
疯叶如血_568
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有