高亮2的另一种实现方法示例
aide吧
全部回复
仅看楼主
level 8
用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
level 11
效率问题......
   —— 你站在桥上看风景
看风景的人在楼上看你
明月装饰了你的窗子
你装饰了别人的梦
我为自己袋盐
2015年08月04日 23点08分 2
level 15
低下
2015年08月04日 23点08分 3
level 9
已收藏
2015年08月04日 23点08分 4
level 9
import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.content.*;
import java.util.*;
import android.text.*;
import android.graphics.*;
import android.text.style.*;
public class EditorActivity extends Activity
{
EditText edt;
SpannableString spannableString;
List<String> keys = new ArrayList<String>();
HashMap<String, Integer> key = new HashMap<String, Integer>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
//接收传递值
Intent intent=getIntent();
String value=intent.getStringExtra("name");
super.onCreate(savedInstanceState);
setContentView(R.layout.editor);
edt=(EditText)findViewById(R.id.editor);
spannableString = new SpannableString("");
settingColor();
}
public void settingColor(){
//符号变色
key.put("(", Color.BLUE);
key.put(")", Color.BLUE);
key.put("[", Color.BLUE);
key.put("]", Color.BLUE)
2015年08月05日 00点08分 5
level 9
key.put("{", Color.BLUE);
key.put("}", Color.BLUE);
key.put(".", Color.BLUE);
key.put(";", Color.BLUE);
key.put(",", Color.BLUE);
key.put(":", Color.BLUE);
key.put("0", Color.RED);
key.put("1", Color.RED);
key.put("2", Color.RED);
key.put("3", Color.RED);
key.put("4", Color.RED);
key.put("5", Color.RED);
key.put("6", Color.RED);
key.put("7", Color.RED);
key.put("8", Color.RED);
key.put("9", Color.RED);
key.put("\"", Color.RED);
key.put("=", Color.GREEN);
key.put("|", Color.GREEN);
key.put("&", Color.GREEN);
key.put("!", Color.GREEN);
key.put("<", Color.GREEN);
key.put(">", Color.GREEN);
key.put("+", Color.GREEN);
key.put("-", Color.GREEN);
key.put("/", Color.GREEN);
key.put("*", Color.GREEN);
key.put("\\", Color.GREEN);
key.put("%", Color.GREEN);
edt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int star
2015年08月05日 00点08分 6
level 9
int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
// for (int i = 0; i < keys.size(); i++) {
// String key = keys.get(i);
// String text = s.toString();
// if (text.contains(key)) {
// int index = 0;
// while((index = text.indexOf(key,index))!=-1){
// s.setSpan(new ForegroundColorSpan(Color.RED), index, index+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
// System.out.println("text "+text+", start "+index+", end "+index+1);
// index += key.length();
// }
// }
// }
Iterator<String> iterator = key.keySet().iterator();
String text = s.toString();
while (iterator.hasNext()) {
String k = iterator.next();
if (text.contains(k)) {
int index = 0;
while ((index = tex
2015年08月05日 00点08分 7
level 9
s.setSpan(new ForegroundColorSpan(key.get(k)), index, index + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
System.out.println("text " + text + ", start " + index + ", end " + (index + 1));
index += k.length();
}
}
}
//String str = edt.getText().toString();
//str = str.substring(0,text.lastIndexOf("\""));
//key.put(str, Color.YELLOW);
//Toast.makeText(EditorActivity.this, str.toString(), Toast.LENGTH_SHORT).show();
}
});
}
}
2015年08月05日 00点08分 8
你这个效率貌似也很慢,字多就卡
2015年08月05日 01点08分
回复
�����ַֹ�
:是啊
2015年08月05日 01点08分
level 10
一定卡,因为我有写过
2015年08月05日 03点08分 9
1