Android如何着色字符串的特定部分
文章选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术。本文探讨Android如何着色字符串的特定部分。
问题:
如下CustomAdapter:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
package com.test.testing; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Locale; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; import android.text.Spannable; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; public class SetRowsCustomAdapter extends ArrayAdapter<SetRows> { Context context; int layoutResourceId; ArrayList<SetRows> data= new ArrayList<SetRows>(); DateFormat df = new SimpleDateFormat( "EEEEE, LLLL d" , Locale.US); String[] suspendedDates = { "Monday, January 20" , "Friday, January 31" , }; public SetRowsCustomAdapter(Context context, int layoutResourceId, ArrayList<SetRows> data) { super (context, layoutResourceId, data); this .layoutResourceId = layoutResourceId; this .context = context; this .data = data; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; ImageHolder holder = null ; if (row == null ) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false ); holder = new ImageHolder(); holder.txtTitle = (TextView)row.findViewById(R.id.tvDateVal); //holder.txtTitle.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); holder.imgIcon = (ImageView)row.findViewById(R.id.ivIcon0); holder.txtDate = (TextView)row.findViewById(R.id.tvDateNum); holder.txtID = (TextView)row.findViewById(R.id.tvReasonVal); //holder.txtID.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/robm.ttf")); row.setTag(holder); } else { holder = (ImageHolder)row.getTag(); } SetRows myImage = data.get(position); int inReason = myImage.name.indexOf( "," ); //myImage.name is the same string as suspendedDates[]; String strR = myImage.name.substring(0, inReason); Spannable WordToSpan = new SpannableString(strR); WordToSpan.setSpan( new ForegroundColorSpan(Color.parseColor( "#4787ED" )), 0, WordToSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); String strRNext = myImage.name.substring(inReason, myImage.name.length()); Spannable WordToSpan1 = new SpannableString(strRNext); WordToSpan1.setSpan( new ForegroundColorSpan(R.color.dateholiday), 0, WordToSpan1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); String strConcat = WordToSpan.toString() + WordToSpan1.toString(); holder.txtTitle.setText(strConcat); //myImage.name); holder.txtID.setText(myImage.id); holder.txtDate.setText(myImage.date); int outImage=myImage.image; /*if (myImage.name.contains(df.format(Calendar.getInstance(Locale.US).getTime()))) { holder.imgIcon.setImageResource(R.drawable.caliconpressed); } else { holder.imgIcon.setImageResource(R.drawable.calicon); }*/ return row; } static class ImageHolder { ImageView imgIcon; TextView txtTitle; TextView txtID; TextView txtDate; } } |
我用Spannable来给字符串分别着色,想要达到这种效果
但是显示出来的还是这个样子:
有没有谁知道如何利用Adapter来实现我想要的效果。
答案:
不要把Spannable变换成字符串 (也就是说,不要做:WordToSpan.toString())
而是,直接将Spannable设置到holder,就像这样:
1
|
holder.txtTitle.setText(WordToSpan + WordToSpan1); |
像下面这样用spannable 字符串
1
2
3
4
|
SpannableString ss = new SpannableString( "hey #abc how are you." ); ss.setSpan( new ForegroundColorSpan(Color.RED), 4, 9, 0); //Now just add the SpannableString to your textview textView.setText(ss); |
希望这能帮到你。
原文链接:How to color specific part of a String
文章选自StackOverFlow社区,鉴于其内容对于开发者有所帮助,现将文章翻译于此,供大家参考及学习。9Tech将每日持续更新,读者可点击StackOverflow(简称:SOF)精选问答汇总,查看全部译文内容。同时,我们也招募志同道合的技术朋友共同翻译,造福大家!报名请发邮件至zhangqi_wj#cyou-inc.com。(#换成@)
Android如何着色字符串的特定部分的更多相关文章
- SQL:将字符串以特定字符分割并返回Table
split 语法 ALTER FUNCTION [dbo].[F_SPLIT] ( @str VARCHAR(MAX) , ) ) /********************************* ...
- 题目1049:字符串去特定字符——九度OJ
题目1049:字符串去特定字符 http://ac.jobdu.com/problem.php?pid=1049 时间限制:1 秒 内存限制:32 兆 题目描述: 输入字符串s和字符c,要求去掉s中所 ...
- Android状态栏着色
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 状态栏着色,也就是我们经常听到的沉浸式状态栏,关于沉浸式的称呼网上也有很多吐槽的,这里就不做过多讨论了,以下我们统称状态栏着色,这样 ...
- Android中五大字符串总结(String、StringBuffer、StringBuilder、Spanna
https://www.aliyun.com/jiaocheng/2861.html?spm=5176.100033.1.35.2ed56b03CbsYFK 摘要:String.StringBuffe ...
- 九度oj 题目1049:字符串去特定字符
题目1049:字符串去特定字符 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:10173 解决:4611 题目描述: 输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果. 输入: ...
- C语言考题:输入一个字符串,将此字符串中特定的字符删去后, 显示新的字符串,要求用函数来完成删去字符的操作。
#include <stdio.h> #include <string.h> /*此题只需要删除单个字符,比较简单.相信大家也能做出来的.我这个也是可以实现的.只是加了两个判断 ...
- Android InputStream接收 字符串乱码 问题
各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”.比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储.这些 ANSI 编码标准所规定的内容包含两层含义:1. ...
- JS正则表达式获取字符串中特定字符
JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取. 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test 实 ...
- Android开发_字符串处理类-TextUtils类
对于字符串处理Android为我们提供了一个简单实用的TextUtils类,如果处理比较简单的内容不用去思考正则表达式不妨试试这个在android.text.TextUtils的类,主要的功能如下: ...
随机推荐
- Django异常问题之Error: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。
一般情况下,我们启动Django项目时默认设置的端口为8000,当你听着酷狗音乐敲着代码,启动Django项目时忽然翻车了. 不要慌,那是酷狗抢先一步占用了8000端口,解决这个问题的方式就是修改端口 ...
- [2017BUAA软工助教]案例分析小结
BUAA案例分析小结 一.作业要求 http://www.cnblogs.com/jiel/p/7631784.html 二.统计数据 总人数 神策数据 博客园博客 必应词典 30 1 12 17 三 ...
- Linux之基础知识
在此总结使用Linux的时候,一些必须知道的基础内容,记录一下,加强记忆 一. linux 运行级别 运行级别就是操作系统当前正在运行的功能级别.这个级别从0到6 ,具有不同的功能.这些级别在/et ...
- 练习MD5加密jar包编写
简介 参数签名可以保证开发的者的信息被冒用后,信息不会被泄露和受损.原因在于接入者和提供者都会对每一次的接口访问进行签名和验证. 签名sign的方式是目前比较常用的方式. 第1步:接入者把需求访问的接 ...
- MySQL Limit优化(转)
原文:http://bbs.landingbj.com/t-0-240894-1.html 首先,我们看一个分页SQL: SELECT time,pageFROM `l_not_200_page`WH ...
- linux和sqlserver 2017的安装
这两天一直在弄linux的安装过程.中间也遇到了不少的坑,主要是网络上的坑人的文章太多.都是坑,最后从redhat官网下载了iso文件,顺便看到官网推荐了一个fedora media writer的烤 ...
- Linux基础学习(14)--日志管理
第十四章——日志管理 一.日志管理简介 1.日志服务: 2.常见日志的作用: 二. rsyslogd日志服务 1.日志文件格式: 2./etc/rsyslog.conf配置文件: 三.日志轮替 1.日 ...
- spring 给一个类 生成test
右击一个类,然后:GoTo==>test ,就可以新建这个类的测试用例了,简单粗暴, 如果想要不污染数据库,就在一个测试用例 的标签@Test 下面在加上@RollBack 这样: @Test ...
- Hotspot Java虚拟机的类加载器
从Java虚拟机角度来讲,有两种类加载器.1.启动类加载器.(Bootstrap ClassLoader,C++)2.所有其他类加载器.(Java,java.lang.ClassLoader) 系统提 ...
- qtp 自动化测试---点滴 获取属性性/修改窗体标题
1 GetROProperty获取对应属性值 value url (这里出错了) If Window("新增").WinObject("TRzDBEdit_10" ...