主页 > 程序人生 > CodeReader的诞生

CodeReader的诞生

首届Google暑期大学生博客分享大赛——2010 Andriod篇

自从买了android的手机后,用这一直都挺舒服的,从最早买的G1到现在用的G3,android系统的开发让我爱不释手,但是渐渐的我却发现在上面看代码却不是那么的爽快。基本上只能用txt格式的方法看,但是白底黑字的代码是无法让好“色”的我满足的,于是就萌发了自己DIY一个代码阅读器的想法。
由于这个程序主要是满足我自己的需要,所以就打算写的比较简单一点,支持C/C++/Java的简单高亮就好。所以就写出了CodeReader,先放一些截图吧,然后再慢慢说这个程序诞生的故事。



开发这个代码阅读器基本上就需要解决以下几个问题:
1.文件的读写
2.代码显示容器
3.代码的缩进
4.代码的染色
于是我便开始上网查询了一些资料~我发现文件的读写不是什么大的问题,我有一本关于Android开发的教材中讲到了文件读写的部分,于是便模仿出了下面的代码~

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
package com.zerob13.Codereader;
import java.util.Vector;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
 
public class fileData{
	public String name;
	public int type;
}
 
class ExpBaseAdapter extends BaseAdapter {
	private Context mContext;
	private Vector mItems = new Vector();
	private LinearLayout layout,layout_more;
 
	public ExpBaseAdapter(Context context) {
		mContext = context;
	}
 
	public void addItem(fileData it) {
		mItems.add(it);
	}
	public fileData getItem(int it) {
		return (fileData)mItems.elementAt(it);
	}
 
	public int getCount() {
		// TODO Auto-generated method stub
		return mItems.size();
	}
 
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return arg0;
	}
	public int getItemType(int arg0) {
		// TODO Auto-generated method stub
		return getItem(arg0).type;
	}
	public void clearItems(){
		mItems.clear();
	}
 
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		//LinearLayout layout=null ;
	    LayoutInflater inflate = (LayoutInflater) mContext.getSystemService(android.content.Context.LAYOUT_INFLATER_SERVICE);
		arg1 = (LinearLayout) inflate.inflate(R.layout.listfile,null);
		TextView fm_text_01= (TextView)arg1.findViewById(R.id.fm_text_01);
		fm_text_01.setText(getItem(arg0).name);
 
	    //Log.v("vodone",""+arg0+" name="+getItem(arg0).name);
 
		/*if (getItem(arg0).equals(".")){
 
		}*/
 
		return arg1 ;
	}
}

然后就是选择显示代码的容器了,一开始我的打算是用TextView,但是我发现如果用TextView的话似乎无法让代码高亮起来啊~于是我便先去寻找了一下代码高亮的实现方法。首先是找到了一个windows下的实现,就是利用RichTextView的那种组件来完成。但是似乎android自带的组件里面没有这么一个玩意啊(哈哈,我是初学者,什么都不懂)。后来问了一个朋友被告知,其实所谓的RichTextView就是和浏览器差不多的东西,就是解析了HTML之类的标记性语言然后实现了高亮。这下子就好办了,直接用android自带的webview就可以解决容器的问题了~
最后就是最关键也是最核心的部分了,如何把纯文本的代码转化成为色彩斑谰的网页呢?这里我用了一个很简单的算法,就是关键词替换~
基本上就是对文本进行扫描,遇到关键词就替换为html语句,为之上色。很快我的0.1版本就出来了~
不过问题可不是到这里就结束了,我发现原来文本里面依靠的”\t”(tab)的缩进在html里面就被忽略了,于是代码就变成了一整块黏合在一起的。怎么办呢?我查阅了html的语法,发现似乎没有什么东西是可以在html里面现实tab缩进的,一时之间卡住了。当时可谓是百思不得其解,后来很偶然的想到,为什么不直接用几个空格来代替一个tab呢?于是问题迎刃而解,不由感慨,有时候很简单的问题,但是却卡在了一条道上导致无法解决啊。
这样,基本上这个程序就完成了。测试了几段代码,效果还不错~如果大家喜欢的话可以在这里下载哦
猛击这里下载CodeReader

相关日志

, , ,

评论:4

参与评论
  1. 回复 Baryn
    10/07/06

    嘿嘿…这个厉害啊~~

  2. 回复 voidxu
    10/07/09

    等我买了,给我分享下,呵呵 :razz:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

引用:1

下面所列的是引用到本博客的链接
CodeReader的诞生 来自 混沌的云
pingback 来自 Tweets that mention CodeReader的诞生 | 混沌的云 -- Topsy.com 2010/07/05

[...] This post was mentioned on Twitter by bobgreen, zerob13. zerob13 said: CodeReader的诞生: 首届Google暑期大学生博客分享大赛——2010 Andriod篇 自从买了android的手机后,用这一直都挺舒服的,从最早买的G1到现在用的G3,android系统的开发让我爱不释手,但是渐… http://bit.ly/aWcadY [...]

顶部