更新网站,自写主题

zhangjunjie.net 的个人网站己建立6年多了,从开始的静态网页,到后来用Blogengine.NET搭建,直到去年换成了Wordpress,找了些主题,一直没觉得有太合适了,最近索性自己改套主题吧(在己有的Zbench基础上:),计划首页会显示自己介绍,然后列出几条最新的分类文件,还好不是太麻烦,使用自定义的Page Template.

还有就是,之后可能会多写英文文章,一是找个机会多练习写做,二是此站也没太多人看吧,哈哈.

没什么人气为什么费时费力费财维护呢,其时主要是给自己看,清楚认识几个问题:
1.Who am I,
2.Where I will go,
3.What have I done.

Android桌面联系人的实现

contact1如图即为要实现的效果,在Launcher上第一页显示常用联系人,从一个到六个不等。并且长按实现删除功能,所有图标缩小,左上角出现X号,点击删除。

开始尝试在Launcher中直接实现,计划把原有的celllayout换成relativelayout,但Launcher会判断,加载的WorkSpace是否是celllayout,不是,不能编译通过。

往下有两条路,之一,继续修改Launcher源码,使其可以加载relativelayout,之二,把celllayout划分到无限细的格,这样也可以放下不规则的布局。但初步分析这两种都方法都比较困难。

突然有人提到了Widget,灵光一现,在Widget的范围内,可以自定义布局,这样基本显示应该没有问题,接下来就是布局的变换到按键事件的响应。因为有六种布局,之间还需要有动画过渡,之前是在一个Layout上,同时有六种布局,只显示一种,其它为gone,但Widget限制Layout只在第一次加载时会有动画效果,所以之后分别用了六个Layout来分别显示不同个数的联系人布局,这样动画问题解决了。

最复杂的是数据的加载过程,第一,需要与联系人模块沟通,指定联系人添加,删除反应到桌面。第二,会从联系人数据库中得到原始头像,自动生成8类大小不一的头像。在联系人数量变化时,自动切换到相应布局,加载对应的头像。第三,桌面联系人与联系人模块分别维护了常用联系人的状态,容错处理也是一块,否则会出现桌面为空,但联系人确认为己经有满6人,无法添加的问题。contacts

第一,与联系人的沟通,点击添加会弹出联系人的“添加新联系人界面”,在列表中勾选想添加的联系人后,会发Broadcast给桌面联系人(StartActivityForResult不能在Widget中使用),Intent中封装的是一HashMap<Integer, String[]>,Integer记录的联系人的ID, String[]包含姓名,电话号码等。获取这些信息会在桌面联系人模块中备份一份。

第二,由ID从数据库中读取联系人的头像,按照定义的规则对头像进行截取,缩放,修圆角等处理,并存储到数据库。由于操作比较费时,会先计算出要显示某张图,其余的会在后台线程中处理后添加数据库。

第三,容错处理,在每次开机是即onEnable函数中,会列出桌面联系人的所有ID,判断此ID是否在联系人模块当中,若不再,就从桌面删除此人,若在,判断此人桌面联系人的标志位是否正确,不正确,同样会从桌面删除。之后会列出联系人数据库中所有标志位为1即在桌面显示的联系人的ID,判断此ID是否在桌面联系人当中,不在,则把标标位置为0.

其它方面包括界面显示时数据的Load过程,添加,删除联系人时,布局的切换过程,正常,编辑模块的状态维护等,细节比较多,整个工程耗时近一个月,2000行左右代码。

File encoding & line delimiter

平常是Win7下使用Eclipse,SourceInsight,Notepad++作为主要的开发工作,但代码会提交到Linux服务器上,最近的项目遇到了File encoding & line delimiter不统一的问题。

File encoding:本想用UTF-8无Bom的格式来保存所有文件,但不争气的SourceInsight却不支持UTF-8格式,无耐之下只能使用ANSI,只是遇到中文注释就比较头痛,且某些XML的资源文件,要求UTF-8.

Line delimiter:之前一直没太注意,但使用Beyond Compare的二进制对比时,发现提交前后有差异,有的显示unix,有的显示pc,还有mix。原来在SourceInsight下,默认使用的是PC(Windows)格式,Elipse默认是unix,同一文件被两者编辑时会出现此问题。解决方法把两种工具设制格式统一,使用Elipse的工具把己有文件转换下。

继续阅读File encoding & line delimiter