热门标签 | 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开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
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社区 版权所有