随风2014🍁 qq243044309
世路由他险,居心任我平
关注数: 14 粉丝数: 32 发帖数: 505 关注贴吧数: 103
高亮2的另一种实现方法示例 用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; } }
关键词高亮的一种实现方法 关键词高亮的一种实现方法 看到有几个吧友问如何实现关键词高亮,百度了又得不到方法,作为初学者我明白找资料的艰辛,因为我也是初学者,很多也是不明白的。于是昨晚写了这个代码,可以实现Edittext实时关键词高亮,在这里作为抛砖引玉。大家有什么问题可以在下面问。另外我写的计算器大家提提意见啊,特别是界面布局方面。计算器下载http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fshare%2Flink%3Fshareid%3D1886004742%26uk%3D3305866429&urlrefer=cac296885dac9996013bfdc813bb297a 好了,高亮代码如下: package com.mycompany.myapp; import android.app.Activity; import android.os.Bundle; import android.text.Html; import android.widget.TextView; import android.widget.*; import android.text.*; import java.util.*; public class MainActivity extends Activity { private Spanned text2; private EditText ed; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ed = (EditText)findViewById(R.id.tv); //实时字符变化监听 ed.addTextChangedListener(new TextWatcher(){ int x=0; @Override public void afterTextChanged(Editable s) { //空 } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { x = s.length(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { if (x < s.length()) { text2 = abc(s.toString()); ed.setText(text2) ; } ed.setSelection(start + count) ; } }); } public Spanned abc(String t) { //各种关键词高亮 String redname[]={"红色","QQ1226938188"}; String bluename[]={"蓝色","小蓝"}; String tsname1[]={"&lt","&gt","&amp;"}; t = t.replaceAll("&","&amp;"); t=t.replaceAll(" ","&nbsp;"); t = t.replaceAll("<","&lt"); t = t.replaceAll(">","&gt"); t = t.replaceAll("\\n","<br>"); t=def(t,tsname1,"green"); t=def(t,redname,"red"); t=def(t,bluename,"blue"); Spannable tt=(Spannable) Html.fromHtml(t); return tt; } // public String def(String t, String[] list,String c) { for (int i=0;i < list.length;i++) { t = t.replaceAll(list[i],"<font color='"+c+"'>"+list[i]+"</font>"); } return t; } }
获取网页源码,昨天搞了一夜,你懂的。现在分享 大家有更简洁的方法吗 //获取网页源码 package com.mycompany.myhttp; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; import android.content.*; import java.io.*; import org.apache.http.client.*; import org.apache.http.client.methods.*; import org.apache.http.*; import org.apache.http.impl.client.*; import java.net.*; public class MainActivity extends Activity { private TextView textview; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); textview = (TextView) findViewById(R.id.textview); new Thread(runnable).start(); textview.setText("正在获取..."); } Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data =msg.getData(); String val = data.getString("value"); Intent in=new Intent(); //将结果值放进urlval里 in.putExtra("urlval", val); //跳转到第二个界面 in.setClass(MainActivity.this, MainActivity2.class); //启动第二个界面 startActivity(in); MainActivity.this.finish(); } } ; Runnable runnable = new Runnable() { @Override public void run() { //耗时操作 String u=posturl("http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.baidu.com%2F%22&urlrefer=2031fd8b00921f44abaaccd115299964); Message msg = new Message(); Bundle data = new Bundle(); data.putString("value", u); msg.setData(data); handler.sendMessage(msg); } } ; public String posturl(String urlv) { String v=""; //根据http协议,要访问服务器上的某个网页,必须先建立一个连接,连接的参数为一个URL try { URL url=new URL(urlv); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置请求方式为GET方式,就是相当于浏览器打开网页 connection.setRequestMethod("GET"); //接着设置超时时间为5秒,5秒内若连接不上,则通知用户网络连接有问题 connection.setReadTimeout(5000); //若连接上之后,得到网络的输入流,内容就是网页源码的字节码 InputStream inStream= connection.getInputStream(); //必须将其转换为字符串才能够正确的显示给用户 ByteArrayOutputStream data=new ByteArrayOutputStream();//新建一字节数组输出流 byte[] buffer = new byte[1024];//在内存中开辟一段缓冲区,接受网络输入流 int len=0; while ((len = inStream.read(buffer)) != -1) { data.write(buffer, 0, len); //缓冲区满了之后将缓冲区的内容写到输出流 } inStream.close(); v = new String(data.toByteArray(), "utf-8"); } catch (IOException e) { return "Fail to convert net stream!"; } return v; } }
1 下一页