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

AndroidTextView:实现多彩文字与多样化字体效果

在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。

好的,所以我认为这应该是一个相当简单的过程.

我已阅读以下问题:

在所有这些问题和答案中,建议似乎都非常相似.我试图避免使用HTML技术,而是改用SpannableString和SpannableStringBuilder.最终,我希望能够在单个TextView中使用多个不同的字体,但是现在,我只想弄清楚如何使多种颜色起作用.

我正在尝试以这种方式实现这些技术:

// Get a typeface for my custom font

String regularFontPath = "fonts/Abel-Regular.ttf";

Typeface regularTf = Typeface.createFromAsset(getActivity().getAssets(), regularFontPath);

// Set the label's typeface (this part is working)

mItemCodesLabel.setTypeface(regularTf);

// Create a spannable builder to build up my

// TextView's content from data

SpannableStringBuilder builder = new SpannableStringBuilder();

// These colors are defined and working well in other parts of my app

ForegroundColorSpan ltGraySpan = new ForegroundColorSpan(R.color.light_gray);

ForegroundColorSpan dkGraySpan = new ForegroundColorSpan(R.color.dark_gray);

// mCodesList has good data and the actual data output from this

// loop is correct. Just the styling is wrong

for (int i = 0; i

ParseObject code = mCodesList.get(i);

String value = code.getString("value") + " | ";

if (i > 0) {

// I want new codes to be on a new line (this works)

value = "

" + value;

}

SpannableString valueSpan = new SpannableString(value);

valueSpan.setSpan(ltGraySpan, 0, value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

builder.append(valueSpan);

String loc = code.getString("location");

SpannableString locSpan = new SpannableString(loc);

locSpan.setSpan(dkGraySpan, 0, loc.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

builder.append(locSpan);

}

mItemCodesLabel.setText(builder);

最终结果是TextView包含正确的文本内容. TextView是正确的字体.但是TextView的全部内容都是我的@ color / light_gray颜色.我不确定为什么,因为在XML布局文件中,我指定了@ color / dark_gray颜色(希望通过设置Spannable设置文本来覆盖该颜色).即使我将两个ForegroundColorSpan对象都更改为使用R.color.dark_gray,TextView仍然显示为浅灰色.我没有在代码的其他任何地方设置文本的颜色,所以我真的很茫然.

我在运行4.4.2的LG Optimus G Pro上运行它.我还有另一个TextView,我需要在其中获得多种颜色和字体,甚至在文本的某些部分下划线,所以对我来说这是一个很大的问题.我要去哪里错了?



推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了如何在Android L版本中应用Material Design的主题和布局,包括Material主题的应用方法、自定义主题和颜色方案、状态栏和导航条的自定义,以及Material Design布局的特点和兼容性处理。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 微信小程序开发指南:创建动态电影选座界面
    本文详细介绍如何在微信小程序中实现一个动态且可视化的电影选座组件,提高用户体验。通过合理的布局和交互设计,使用户能够轻松选择心仪的座位。 ... [详细]
  • VC++ 文件操作实践案例
    本文介绍如何在Visual C++ 6.0环境下,通过下载的VC源代码实现文件的基本读写操作,并解决常见的运行错误。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • HTML:  将文件拖拽到此区域 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
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社区 版权所有