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

Day3.2--Android简单UI控件之TextView的高级使用--SpannableString的使用

上节课,介绍了TextView的简单使用,包括在xml文件静态设置TextView的属性和文本内容信息,以及在java代码中动态的改变一个TextView所要显示的内容。掌握了基本使用之后,我们来看

上节课,介绍了TextView的简单使用,包括在xml文件静态设置TextView的属性和文本内容信息, 以及在java代码中动态的改变一个TextView所要显示的内容。掌握了基本使用之后,我们来看一下TextView的其它高大上的使用方式。 首先我们来看一张图片,如下图:


如上图所示:

第一行文字中包含一个带有超链接的文本信息

第二行文字中包含一个带下划线的文本信息

第三行文字中包含一个机器人图片

第四行和第五行文字中分别包含一个带下标和上标的文本信息


如果要使用TextView实现以上功能,必须再引入一个新的概念--SpannableString: 官方文档对SpannableString做出的解释是一个不可变的字符串,但是可以在此字符串的基础上添加其他的对象属性。通俗来讲,就是可以将一系列字符串映射成一个超链接、图片等等。接下来看一下具体如何使用:

package com.danny_jiang.utils;

import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.text.style.SubscriptSpan;
import android.text.style.SuperscriptSpan;
import android.text.style.URLSpan;
import android.text.style.UnderlineSpan;

/**
*
* @author Danny_姜
* 此工具类封装了获取各种文本信息映射的方法, 比如:
* 1、超链接文本
* 2、图片文本
* 3、带下划线的文本
* 4、自带上标、下标的文本
*
*/
public class SpanStringUtils {

/**
* 获取文本信息的超链接映射
*
* @param text
* 链接地址的文字显示内容,如“超链接”
* @param url
* 具体链接地址, 如“http://www.baidu.com”
* @return
*/
public static SpannableString getLinkSpan(String text, String url) {
SpannableString spanString = new SpannableString(text);
URLSpan span = new URLSpan(url);
spanString.setSpan(span, 0, spanString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanString;
}

/**
* 获取需要添加下划线的SpannableString
* @param text
* 需要添加下划线的文本信息
*/
public static SpannableString getUnderLineSpan(String text) {
SpannableString spanString = new SpannableString(text);
UnderlineSpan span = new UnderlineSpan();
spanString.setSpan(span, 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanString;
}

/**
* 获取文本信息的图片映射
* @param drawable
* 文本信息所需要映射成的图片Drawable对象
*/
public static SpannableString getImageSpan(Drawable drawable) {
SpannableString spanString = new SpannableString(" ");
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);
spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanString;
}

/**
* 添加文本信息的下标映射
* @param text
* 需要添加下标映射的文本信息
*/
public static SpannableString getSubscript(String text) {
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new SubscriptSpan(), text.length() - 1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanString;
}

/**
* 添加文本信息的上标映射
* @param text
* 需要添加上标映射的文本信息
*/
public static SpannableString getSuperscript(String text) {
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new SuperscriptSpan(), text.length() - 1, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spanString;
}

}

以上工具类封装了几种常用的SpannableString,分别可以将一定的String字符串映射成超链接文本、图片、自带下划线、上下标等。接下来看xml布局文件中的代码:

    xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical" >

android:id="@+id/text_LinkSpan"
android:layout_
android:layout_
android:text="演示文本链接" />

android:id="@+id/text_UnderlineSpan"
android:layout_
android:layout_
android:text="演示带下划线文本" />

android:id="@+id/text_ImageSpan"
android:layout_
android:layout_
android:text="演示图片文本信息" />

android:id="@+id/text_SubscriptSpan"
android:layout_
android:layout_
android:text="演示带下标的文本信息" />

android:id="@+id/text_SuperscriptSpan"
android:layout_
android:layout_
android:text="演示带上标的文本信息" />


可以看到,在xml文件中定义了5个TextView分别用来演示相应的效果, 最后在MainActivity.java中初始化这5个Activity,并设置SpannableString,代码如下:

private void initTextViews() {

// 演示超链接文本信息
TextView linkText = (TextView) findViewById(R.id.text_LinkSpan);
SpannableString linkSpan = SpanStringUtils.getLinkSpan("超链接", "http://www.baidu.com");
linkText.append(linkSpan);
linkText.setMovementMethod(new LinkMovementMethod());

// 演示带下划线的文本信息
TextView underLineText = (TextView) findViewById(R.id.text_UnderlineSpan);
SpannableString underLineSpan = SpanStringUtils.getUnderLineSpan("带下划线文本");
underLineText.append(underLineSpan);

// 演示图片文本信息
TextView imageText = (TextView) findViewById(R.id.text_ImageSpan);
Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);
SpannableString imageSpan = SpanStringUtils.getImageSpan(drawable);
imageText.append(imageSpan);

// 演示带下标文本信息
TextView subscriptText = (TextView) findViewById(R.id.text_SubscriptSpan);
SpannableString subTextSpan = SpanStringUtils.getSubscript("abc2");
subscriptText.append(subTextSpan);

// 演示带下标文本信息
TextView superScriptText = (TextView) findViewById(R.id.text_SuperscriptSpan);
SpannableString superTextSpan = SpanStringUtils.getSuperscript("abc2");
superScriptText.append(superTextSpan);
}

最后运行效果如下图所示:




推荐阅读
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • andr ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • Java 类成员初始化顺序与数组创建
    本文探讨了Java中类成员的初始化顺序、静态引入、可变参数以及finalize方法的应用。通过具体的代码示例,详细解释了这些概念及其在实际编程中的使用。 ... [详细]
  • 将Web服务部署到Tomcat
    本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ... [详细]
author-avatar
_我的最愛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有