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=newArrayList<SetRows>();   DateFormat df = newSimpleDateFormat("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 = newImageHolder();           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 = newSpannableString(strR);        WordToSpan.setSpan(newForegroundColorSpan(Color.parseColor("#4787ED")), 0, WordToSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);        String strRNext = myImage.name.substring(inReason, myImage.name.length());        Spannable WordToSpan1 = newSpannableString(strRNext);    WordToSpan1.setSpan(newForegroundColorSpan(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);       }*/      returnrow;   }   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 = newSpannableString("hey #abc how are you.");ss.setSpan(newForegroundColorSpan(Color.RED), 4, 9, 0);//Now just add the SpannableString to your textviewtextView.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的类,主要的功能如下: ... 
随机推荐
- freemarker根据模板生成word文件实现导出功能
			一.准备工作 1.创建一个03的word文档,动态的数据用占位符标志占位(如testname).然后另存为word2003的xml文件. 2.格式化xml文件,占位符的位置用${testname}代替 ... 
- 《梦断代码》Scott Rosenberg著(三)
			开放与封闭之论: 程序源代码是商业软件公司最重要的资产,所以软件公司售卖二进制文件.这样也就意味着如果微软的软件产品出了问题,即便你是一个程序大牛也无法修复它.你只能等着微软来修正问题,因为只有微软程 ... 
- mysql cpu 100% 满 优化方案
			解决MySQL CPU占用100%的经验总结 - karl_han的专栏 - CSDN博客 https://blog.csdn.net/karl_han/article/details/5630782 ... 
- JavaScript charAt() 方法
			<script> var str="abcdef"; alert(str[0]); //a,高版本浏览器兼容 alert(str.charAt(0)); //a,兼容所 ... 
- java.lang.Comparable 接口 详解
			参考https://blog.csdn.net/itm_hadf/article/details/7432782 http://www.blogjava.net/jjshcc/archive/2011 ... 
- 在Hmtl页面中只让其中单独的一个div隐藏滚动条但是仍可滚动浏览下边的内容
			<style> .box ::-webkit-scrollbar {width: 0px;} </style> <div class="box"> ... 
- 莫烦scikit-learn学习自修第四天【内置训练数据集】
			1. 代码实战 #!/usr/bin/env python #!_*_ coding:UTF-8 _*_ from sklearn import datasets from sklearn.linea ... 
- Java中的super()使用注意
			1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)3)super: 它引用当前对象的 ... 
- DBX error:Driver could not be properly initialized .... 解决办法
			系统: win7 64位+ MySql 将libmysql.dll和Dbxmys.dll 拷到 C:\Windows\SysWOW64 目录. ( 64位系统) 32位则拷到 c:\wind ... 
- debug方法
			debug as -> spring boot->开始了 可以添加 ,, 来进行向下步骤:使用其他方法(在方法内打点) 一步步F6就可以了 
