level 8
随风2014🍁
楼主
用html处理显示要注意特殊字符的处理,所以不适合显示太复杂的字符串。
这里是另一种实现高亮的方法,只是一个示例,要实现于应用中还要适当改进。
以下是代码:
/*代码编写by二〇一三一四
高亮关键词显示的一种实现方法
*/
package com.mycompany.myapp;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.BackgroundColorSpan;
import android.widget.TextView;
import android.text.style.*;
import java.lang.reflect.*;
import java.util.*;
import android.widget.*;
import android.util.*;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText tv = (EditText) findViewById(R.id.tv);
//测试字符串
String t= ",.;()Fly计算器La\\aight\"红色\"Ma\n Yi\n\\\\gCaQQ1226938188红色i";
//mapname用来存放高亮关键词和对应的颜色
HashMap<String,String> mapname ;
mapname = new HashMap<String,String>();
//添加高亮关键词和颜色
//可以把高亮颜色相同的关键词用数组循环添加
mapname.put("红色", Color.RED + "");
mapname.put("\"",Color.GREEN+"");
mapname.put("\\",Color.BLUE+"");
mapname.put(",.;()",Color.RED+"");
mapname.put("Fly计算器",Color.CYAN+"");
mapname.put("QQ1226938188",Color.BLUE+"");
//添加完成
//处理
highcolor(t, mapname, tv);
}
public void highcolor(String t, HashMap mapname, TextView tv)
{
//高亮处理
HashMap m=findin(t,mapname);
SpannableStringBuilder fontColorerlingyisanyisi=new SpannableStringBuilder(t);
String k;
//历遍
for (Map.Entry<String, ArrayList> entry : m.entrySet())
{
k = entry.getKey();//词条
ArrayList val=entry.getValue();//颜色位置
int c=Integer.parseInt(val.get(0).toString());//第一为颜色
int x=k.length();
//历遍位置
for (int i=1;i < val.size();i++)
{
int start=Integer.parseInt(val.get(i).toString());
int end=start + x;
fontColorerlingyisanyisi.setSpan(new ForegroundColorSpan(c), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
tv.setText(fontColorerlingyisanyisi);
}
//
public HashMap findin(String t, HashMap n)//n词条、颜色
{
//原字符串,需要找的字符串map,返回map词条,颜色位置组。
HashMap<String,ArrayList> map ;
map = new HashMap<String,ArrayList>();
for (Map.Entry<String, String> entry : n.entrySet())
{
String k=entry.getKey();
String val=entry.getValue();
ArrayList <String> list=new ArrayList <String>();
list.add(val);
int i=t.indexOf(k);//第一次出现位置
list.add(i + "");
while (i > 0)
{
i = t.indexOf(k, i + k.length());//继续找第二次
if (i > -1)
{
list.add(i + "");
}
}
map.put(k, list);
}
return map;
}
}

2015年08月04日 22点08分
1
这里是另一种实现高亮的方法,只是一个示例,要实现于应用中还要适当改进。
以下是代码:
/*代码编写by二〇一三一四
高亮关键词显示的一种实现方法
*/
package com.mycompany.myapp;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.BackgroundColorSpan;
import android.widget.TextView;
import android.text.style.*;
import java.lang.reflect.*;
import java.util.*;
import android.widget.*;
import android.util.*;
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText tv = (EditText) findViewById(R.id.tv);
//测试字符串
String t= ",.;()Fly计算器La\\aight\"红色\"Ma\n Yi\n\\\\gCaQQ1226938188红色i";
//mapname用来存放高亮关键词和对应的颜色
HashMap<String,String> mapname ;
mapname = new HashMap<String,String>();
//添加高亮关键词和颜色
//可以把高亮颜色相同的关键词用数组循环添加
mapname.put("红色", Color.RED + "");
mapname.put("\"",Color.GREEN+"");
mapname.put("\\",Color.BLUE+"");
mapname.put(",.;()",Color.RED+"");
mapname.put("Fly计算器",Color.CYAN+"");
mapname.put("QQ1226938188",Color.BLUE+"");
//添加完成
//处理
highcolor(t, mapname, tv);
}
public void highcolor(String t, HashMap mapname, TextView tv)
{
//高亮处理
HashMap m=findin(t,mapname);
SpannableStringBuilder fontColorerlingyisanyisi=new SpannableStringBuilder(t);
String k;
//历遍
for (Map.Entry<String, ArrayList> entry : m.entrySet())
{
k = entry.getKey();//词条
ArrayList val=entry.getValue();//颜色位置
int c=Integer.parseInt(val.get(0).toString());//第一为颜色
int x=k.length();
//历遍位置
for (int i=1;i < val.size();i++)
{
int start=Integer.parseInt(val.get(i).toString());
int end=start + x;
fontColorerlingyisanyisi.setSpan(new ForegroundColorSpan(c), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
tv.setText(fontColorerlingyisanyisi);
}
//
public HashMap findin(String t, HashMap n)//n词条、颜色
{
//原字符串,需要找的字符串map,返回map词条,颜色位置组。
HashMap<String,ArrayList> map ;
map = new HashMap<String,ArrayList>();
for (Map.Entry<String, String> entry : n.entrySet())
{
String k=entry.getKey();
String val=entry.getValue();
ArrayList <String> list=new ArrayList <String>();
list.add(val);
int i=t.indexOf(k);//第一次出现位置
list.add(i + "");
while (i > 0)
{
i = t.indexOf(k, i + k.length());//继续找第二次
if (i > -1)
{
list.add(i + "");
}
}
map.put(k, list);
}
return map;
}
}
