﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Codejie's C++ Space-随笔分类-EL</title><link>http://www.cppblog.com/codejie/category/20633.html</link><description>Using C++</description><language>zh-cn</language><lastBuildDate>Sat, 26 Apr 2014 17:50:29 GMT</lastBuildDate><pubDate>Sat, 26 Apr 2014 17:50:29 GMT</pubDate><ttl>60</ttl><item><title>EL : Free package of February</title><link>http://www.cppblog.com/codejie/archive/2014/02/22/205907.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 22 Feb 2014 13:12:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2014/02/22/205907.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/205907.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2014/02/22/205907.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/205907.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/205907.html</trackback:ping><description><![CDATA[<p><br />&nbsp;&nbsp;&nbsp; 昨天意外收到LingosHook的插件捐赠, 开心的狠...但仔细一看, 怎么又是haolly呢? 一问才知, 原来是为了EL的内容包...于是开始恐慌起来...因为EL没有"市场"的缘故, 已经不更新了... 而haolly又"拒绝"退货, 这..这收了银子, 不干事总是不好的, 那, 好吧, 我更, 反正又么说更几个, 嘿嘿...<br /><br />&nbsp;&nbsp;&nbsp; 于是昨晚加上今早, 折腾了很久, 终于打包好了ESL的131到135课程内容. 唉, 自己都忘记EL下载的"奥妙"之处了 -- EL内容包更新服务器就在www.cppblog.com, 而实际内容包是放在skydrive.live.com或其它服务器上的, 中间又有很大的圈子要绕的, 这一切都是靠那个Request Code来引导的...很是繁琐, 但, 唉, 谁叫咱没银子够租个服务器呢...&nbsp;&nbsp;&nbsp; </p> <p>&nbsp;&nbsp;&nbsp; 今天测试发现EL在下载内容包时还是有个Bug, 很是"顽固", 本想随手升级下, 却发现googleode.com似乎不支持上传下载文件了, 这, 这是要断了我"发布"的渠道啊...好吧, 既然没法更新应用, 咱今天就借着haolly给的机会, "透露"下EL内容包直接更新秘密 -- 将下载的内容包直接放到EL所在SDCard上目录的cache目录下(sdcard/jie/cache), 重启EL即可.&nbsp; 当然简单的方法还是直接输入内容包的Request Code.</p> <p>&nbsp;&nbsp;&nbsp; 不废话了, 请<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">这里查看EL的ESL 131-135内容包.</a> 再次感谢haolly的大力支持.</p><img src ="http://www.cppblog.com/codejie/aggbug/205907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2014-02-22 21:12 <a href="http://www.cppblog.com/codejie/archive/2014/02/22/205907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Free package of December</title><link>http://www.cppblog.com/codejie/archive/2013/12/14/204795.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 14 Dec 2013 03:19:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/12/14/204795.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/204795.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/12/14/204795.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/204795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/204795.html</trackback:ping><description><![CDATA[<p style="white-space: normal; word-spacing: 0px; text-transform: none; color: #000000; font: 13px/20px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px"><strong>快捷方式</strong></p> <ul style="white-space: normal; word-spacing: 0px; text-transform: none; color: #000000; font: 13px/20px verdana, geneva, arial, helvetica, sans-serif; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px"> <li>点击这里<a style="text-decoration: none; color: #0066aa" href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>, 亦可<a href="https://play.google.com/store/apps/details?id=jie.android.el">访问Google Play</a>; </li><li>点击这里<a style="text-decoration: none; color: #0066aa" href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>,<span class="Apple-converted-space">&nbsp;</span><a style="text-decoration: none; color: #0066aa" href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a style="text-decoration: none; color: #0066aa" href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,  </li><li>点击这里<a style="text-decoration: none; color: #0066aa" href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a> </li></ul> <p><font face="Verdana"></font>&nbsp;</p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 一下子十二月都过了一半了..这个月的免费包上周就传上来了, 只是测试中一直发现个问题, 也就没发帖说明 -- 如果EL不开着, 下载的内容包就没法自动加载进来. 没认真调试, 不知道是不是跟升级到4.4.2有关...</font></p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 为啥没认真呢? 因为啊, 因为发现EL就没人用啊(发财梦破灭了哦)...这个月放上去的是手里的最后一个包 -- EL课程126到130课, 后面没啥'意外'就不更新了, 有空再说吧...</font></p> <p><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--Free-package-of-December_97CF/image_a69faef6-c1b2-41bf-938c-65a0a7bf3182.png" width="240" height="400" /><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--Free-package-of-December_97CF/image_9a7e70a7-9f92-4e12-a242-0428a80f2e01.png" width="240" height="400" /></p> <p><font face="Verdana"></font>&nbsp;</p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 发财的梦还要做下去, 所以这快一个月的时间也没闲着, 游戏(I;P)一直在敲, 没个美工还真是辛苦啊, 一个开始画面就要全部用代码来实现, 这是要疯啊...</font></p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 不多说了, 继续敲去了, 希望这个游戏可以博得大家的喜欢...</font></p> <p><font face="Verdana"></font>&nbsp;</p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 另, 真有喜欢EL的, 请跟帖吧, 回头找个时间写个"如何制作EL的课程包"的课程来...</font></p> <p><font face="Verdana"></font></p><img src ="http://www.cppblog.com/codejie/aggbug/204795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-12-14 11:19 <a href="http://www.cppblog.com/codejie/archive/2013/12/14/204795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Release 1.6.1 and Free package of November</title><link>http://www.cppblog.com/codejie/archive/2013/11/10/204190.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 10 Nov 2013 09:28:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/11/10/204190.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/204190.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/11/10/204190.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/204190.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/204190.html</trackback:ping><description><![CDATA[<p style="white-space: normal; text-transform: none; word-spacing: 0px; color: #000000; font: 13px/20px verdana, geneva, arial, helvetica, sans-serif; margin: 10px 0px; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px"><strong>快捷方式</strong></p> <ul style="white-space: normal; text-transform: none; word-spacing: 0px; color: #000000; font: 13px/20px verdana, geneva, arial, helvetica, sans-serif; letter-spacing: normal; background-color: #ffffff; text-indent: 0px; -webkit-text-stroke-width: 0px"> <li>点击这里<a style="color: #0066aa; text-decoration: none" href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp; </li><li>点击这里<a style="color: #0066aa; text-decoration: none" href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>,<span class="Apple-converted-space">&nbsp;</span><a style="color: #0066aa; text-decoration: none" href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a style="color: #0066aa; text-decoration: none" href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,  </li><li>点击这里<a style="color: #0066aa; text-decoration: none" href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a></li></ul> <p><font face="Verdana"></font>&nbsp;</p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; EL这个版本主要增加了'中文'支持和修改部分bugs. </font></p> <p><font face="Verdana"><font face="Verdana"><img title="el_57" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="el_57" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--Release-1.6.1_CF59/el_57_60e3ecec-6228-40f0-bf4f-7766c79d877c.png" width="240" height="400" /></font></font></p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 本来这几天忙于敲一个新的应用(I;P), 但某个夜里, 突发奇想地想试试google play是个啥, 于是用我唯一的信用卡尝试注册了play, 本来想着国内注册个play账号应该跟网上流传的一样 -- 十有八九被'哔'掉, 所以没怎么当回事, 结果第二天一看, Y的, 好吧, Google, 那U$25归你了...</font></p> <p><font face="Verdana">&nbsp;&nbsp;&nbsp; 既然钱都被收了, 那不试试就有点冤大头了...所以赶紧做了这个EL Release1.6.1传了上去. 本来想着按照网上流传的一样, 应该审查好多天吧, 结果, Y的, 没到两小时, 竟然直接在play中能查到了...好吧, Google, 败给你了...说好的审查原来就不存在啊, 怪不得每次在Play上查看最新app时, 总是见到各种各样的'哔'类应用. Google, 网上流传的关于你的'Do't Be Evil'信条难道也只是传说?</font></p> <p><font face="Verdana">&nbsp;&nbsp; App上传需要一个512x512的应用图标, 我这样没有美工, 自己又不会PS的, EL只好如下模样登录Google Play了...</font></p>  <p><img title="el_play_icon" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="el_play_icon" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--Release-1.6.1_CF59/el_play_icon_34fed54f-2812-4e41-aa0f-2e104f2e8eaf.png" width="172" height="260" /></p> <p><a href="http://play.google.com/store/apps/details?id=jie.android.el">http://play.google.com/store/apps/details?id=jie.android.el</a></p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 为了庆祝EL传到Play, 也是到了11月了不是, 所以啊, 请下载<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">本月EL免费内容包 - 121-125课</a>! (这个上个月就做好的, taobao上看, 似乎EL不是大家需要的, 所以一直懒的做新的了...)</p><img src ="http://www.cppblog.com/codejie/aggbug/204190.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-11-10 17:28 <a href="http://www.cppblog.com/codejie/archive/2013/11/10/204190.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.6.0 Release</title><link>http://www.cppblog.com/codejie/archive/2013/10/21/203861.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Mon, 21 Oct 2013 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/10/21/203861.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203861.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/10/21/203861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203861.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203861.html</trackback:ping><description><![CDATA[<p>&nbsp;</p> <p><strong>快捷方式</strong></p> <ul> <li>点击这里<a style="color: #0066aa; text-decoration: none" href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp; </li><li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>,<span class="Apple-converted-space">&nbsp;</span><a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,  </li><li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a> </li></ul> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; EL这次被我重写了一半的代码 -- 大量的aidl接口被broadcast方式替换掉了, 这大大减少了UI和Service, 以及个模块间的耦合. 而引起这样做的原因仅仅是为了给EL增加个Widget. 在开始敲EL时, 我已经尽力地分割开各个模块的功能, 并用Intent, aidl什么的减少相互间的连接, 但当开始添加Widget时, 才感觉做的还不够'绝'啊. 比如, 当开始播放时, 课程显示UI, 通知栏以及widget都需要知道, 而如果用intent或aidl, 那就很麻烦了, 需要一个一个通知到, 此时broadcast就是一个不二的选择了. 为了表现自己的'决心', EL几乎算是重写了所有和播放有关的操作, 曾经的aidl, callback全都换成了broadcast...</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 对于一个app来说, '技术细节'不是主角, 就像我不会告诉你整个EL就用了一个Activity一样, 功能才是主题不是?</p> <p>&nbsp;&nbsp;&nbsp; EL 1.6.0更新如下:</p> <p>&nbsp;&nbsp;&nbsp; 1. 新增EL的Widget;</p> <p>&nbsp;&nbsp;&nbsp; 2. 修正包下载bugs;</p> <p>&nbsp;&nbsp;&nbsp; 3. 重新设计播放接口;</p> <p>&nbsp;&nbsp;&nbsp; 4. 重写UI切换代码;</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 1. EL的Widget</p> <p><img title="el_54" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_54" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_54_3.png" width="240" height="400" /><img title="el_55" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_55" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_55_3.png" width="240" height="400" /><img title="el_56" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_56" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_56_3.png" width="240" height="400" /></p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; 上图所示, EL新增的Widget跟其播放界面中的操作栏完全一致, 功能也一样, 包括播放的快速定位选择. (这个酷不? 我还没见过哪个app像EL这样无聊到在Widget上添加个'菜单', 嘿嘿~) 点击Widget中的EL图标, 可以快速打开EL应用.</p> <p>&nbsp;</p> <p>&nbsp;&nbsp;&nbsp; EL 1.6.0其它更新都是'看不见', 就不敲了, EL的使用说明请<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">参见这里</a>.</p><img src ="http://www.cppblog.com/codejie/aggbug/203861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-10-21 23:48 <a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.5.0 Release</title><link>http://www.cppblog.com/codejie/archive/2013/10/09/203623.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 09 Oct 2013 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/10/09/203623.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203623.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/10/09/203623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203623.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203623.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>, <a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a><br />
     </li>
</ul>
<br />
<br />
&nbsp; &nbsp; 没人报Bugs, 假期就继续敲新版本了, 所以, EL Release 1.5.0来的比较早哦..<br />
&nbsp;&nbsp;<br />
&nbsp; &nbsp; EL 1.5.0主要新增了如下两个功能:<br />
&nbsp; &nbsp; 1. 自动下载/安装新版本;<br />
&nbsp; &nbsp; 2. 通知栏中控制播放;<br />
<br />
&nbsp; &nbsp; 1. 自动下载/安装新版本<br />
&nbsp; &nbsp; 这个功能应该在EL第一版的时候就该支持, EL没有放到任何的'应用商店'中, 这意味着不会自动通知和下载, 每次更新都要用户下载apk包, 然后再安装, 这真是罪过啊...对不起啊, 我也是才想起来, 所以赶紧就加上了.<br />
&nbsp; &nbsp; 如下图所示, 当点击'Check for new packages' 按钮时, 如果EL发现有新版本了, 就会自动提示是否下载安装. 在确认下载安装后, EL会开始下载新版本, 并在下载完成时自动安装.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_49.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_50.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_51.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 下载提示只会每次检查新包时会提示一次, 但在About界面中总会显示最新版本的(Latest Version is xxx). 另外, EL的数据是放置在sdcard上的, 只要不删除数据文件, 更新EL并不会丢失原来的数据.<br />
<br />
&nbsp; &nbsp; 这里需要说明下, 根据Android的安全机制, 并不能保证下载后的EL安装包能够安装成功, 可能由于权限, 或者签名等等问题导致无法安装或者安装失败. 当失败时, 因为EL安装包已经下载好了, 只需要打开sdcard下的<strong>/jie/el/cache/el.apk</strong>文件手工安装下皆可, 不需要再下载和拷贝安装EL安装包了. (想来像我这样直接全手工制作和安装Android ROM的应该不多吧? 这样做的好处就是 -- 想干嘛就干嘛...)<br />
<br />
&nbsp; &nbsp; 2. 通知栏中控制播放<br />
&nbsp; &nbsp; 当EL播放时候被切换到后台时会有通知显示在通知栏中, 如下图所示. 现在可以直接通过这个通知来控制后台的播放, 而不再需要打开EL了, 方便不?&nbsp;<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_52.png" border="0" alt="" /><br />
<br />
&nbsp; &nbsp; 点击通知中的图标,可以进行相应的操作 -- 前一个, 播放/暂停, 下一个和关闭.&nbsp;<br />
&nbsp; &nbsp; 由于Android 2.3.x不支持这个功能, 所以2.3.x版本上的EL的播放通知还是原来的样子, 只能直接点击切换到EL, 而不能像现在这样直接控制播放.&nbsp;<br />
<br />
&nbsp; &nbsp; 另外, 现在只有EL在播放时被切换到后台, 才在通知栏中显示通知. 不再像前面的版本每次播放都现在通知了. (省的每次切换是都显示下通知, 好闪啊...)<br />
<br />
&nbsp; &nbsp; 3. 透明播放控制区<br />
&nbsp; &nbsp; 如下图, 现在播放控制改成透明的了, 加上点击隐藏'内容标题栏'功能, 现在显示区域感觉更大了不是?<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_53.png" border="0" alt="" width="240" height="400" /><br />
<br />
<br />
&lt;---- 赶紧收工的分割线 ----&gt;<br />
&nbsp; &nbsp; 那个用来控制播放的通知原本可以做的再cool点, 后来想想, 算了 -- 知道咋做就好了. 所以其它通知的样子也就没有再改一个了...唉, 发现自己越来越把EL当成练手的应用了, 很多代码都是改来改去, 总是想加点好玩的代码在里面, 而不是想着什么功能了, 什么稳定了...是不是赶紧敲完后面两个功能, 然后停手会对EL更好点呢?<img src ="http://www.cppblog.com/codejie/aggbug/203623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-10-09 22:34 <a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Free Package of October</title><link>http://www.cppblog.com/codejie/archive/2013/10/01/203517.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 01 Oct 2013 13:45:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/10/01/203517.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203517.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/10/01/203517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203517.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203517.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 十月还是来了, 比我预期的来的早...因为来的早, 加上这几天又有树莓派来捣乱, 所以啊, 十月EL的Free Package就没做...<br />&nbsp; &nbsp; 但, 这是不对的! 晚上终于翻出来了EL早期的测试内容包--ESL的16到20! 根据朋友的建议 -- '你Y一个包那么大, 我下载都要个五分钟, 能弄个小的不?'...(好吧, 败了, 以我的网速, 测试下载一个包要20+分钟好不, Y的...) 所以这次跟ESL 15课一样, 做了个单独课程的内容包, <a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">请查看这里</a>. (嘿嘿, 一次一个包, 够再顶四个月用的了...)<br /><br />&nbsp; &nbsp; 另外有人问 -- '怎么查询一个没有高亮的单词?', 嗯, 这问题太'高端'了 -- 因为这是我一直想搞定但还没有找到好办法搞定的问题. 除了2.3.x的兼容, 我还搞不定ActionMode. 唉, 所以啊, 目前的法子就是先'选中', 然后在ActionBar上选中'拷贝', 再'粘贴'到查询框里, 如下面所示.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_44.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_45.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_46.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; 先这样用着, 待我哪天突然'醍醐灌顶'了再补上吧...<br /><br />&nbsp; &nbsp; 这两天夜里EL还是有近战的, Release1.5.0可能会来的早点, 呵呵...看下图, 能看出啥'剧透'不?<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_47.png" border="0" alt="" width="240" height="400" /><br />&nbsp; &nbsp;&nbsp;<img src ="http://www.cppblog.com/codejie/aggbug/203517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-10-01 21:45 <a href="http://www.cppblog.com/codejie/archive/2013/10/01/203517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.4.0 Release</title><link>http://www.cppblog.com/codejie/archive/2013/09/28/203461.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 28 Sep 2013 06:49:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/28/203461.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203461.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/28/203461.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203461.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203461.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>, <a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a><br />
     </li>
</ul>
<br />
&nbsp; &nbsp; EL 1.4.0算是敲好了, 以咱的敲字速度理应在上周放假期间就可以Release的, 只是这期间的敲字节奏被另外一件事情打乱了, 它就是 -- <a href="http://zh.wikipedia.org/wiki/%E6%A0%91%E8%8E%93%E6%B4%BE">树莓派(RaspberryPi)</a>!<br />
&nbsp; &nbsp;&nbsp;<br />
&nbsp; &nbsp; 一天晚上十点多了, 朋友拿来个小盒子, 跟我说 -- "来看看...". &nbsp;哇, 一块开发板, 很是惊喜, 上次摸(就是一摸)这东东还是搞WinCE的时候呢, 这都已经好多好多年过去了... <br />
&nbsp; &nbsp; "这块是树莓派, 还有这个传感器, 你把数据取出来给我传上来..."<br />
&nbsp; &nbsp; "啥? 等等, 等等. 你知道我完全不会搞这个好不?"<br />
&nbsp; &nbsp; "是吗?! 没啥, 我相信你..."<br />
&nbsp; &nbsp; "这...好吧. 那给我讲下该咋弄先."<br />
&nbsp; &nbsp; "这个是电源, 这个是板子, 这还有个USB无线模块. 哦, 这个是个温度传感器, 应该是用这些排线连上吧? 省点用, 给我留几根啊..."<br />
&nbsp; &nbsp; "啥? 啥叫'应该'?"<br />
&nbsp; &nbsp; "...意思就是, 我也不知道咋用, 你自己看着办. 系统在这张SD卡上了, 刚拷贝来的..."<br />
&nbsp; &nbsp; "... ..."<br />
<br />
&nbsp; &nbsp; 于是随后几个的深夜里, 都是树莓派上闪闪的LED陪着我了...<br />
<br />
&nbsp; &nbsp; 扯远了..咱还是继续说EL, 树莓派相关的, 回头空了再来贴...<br />
<br />
&nbsp; &nbsp; EL 1.4.0主要修改如下:<br />
&nbsp; &nbsp; 1. 重新封装popWindow, popMenu;<br />
&nbsp; &nbsp; 2. 新增背诵(Reciting)功能;<br />
&nbsp; &nbsp; 3. 新增生词本(Vocab)功能;<br />
&nbsp; &nbsp; 4. 其它微小改动；<br />
<br />
&nbsp; &nbsp; 记忆和生词本是LingosHook的<a href="http://www.cppblog.com/codejie/archive/2010/04/01/111306.html">主要功能</a>, 作为其衍生应用, 这部分是不能少的...<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_35.png" border="0" alt="" /><br />
&nbsp; &nbsp; 在此版本中, 可以在EL的课程显示和词典界面中, 将选中的单词添加到EL的生词本(Vocab)中.&nbsp;<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_34.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 如上图所示, 当在ESL课程显示和词典界面中,&nbsp;单词被查询时, 在应用弹出其解释窗口中可以<strong>通过长时间点击(Long Click)单词的方式将单词添加到生词本</strong>中, 此时应用会显示图中的提示信息, 表示已完成添加操作.<br />
<br />
1. 背诵(Reciting)功能<br />
&nbsp; &nbsp; 点击菜单中的'My Vocab'选项, 应用切换到Recting界面. 类似<a href="http://www.cppblog.com/codejie/archive/2010/04/01/111306.html">LingosHook</a>和<a href="http://www.cppblog.com/codejie/archive/2012/08/30/164888.html">LAC</a>的记忆功能, 通过对单词的'熟悉度'打分来判断对单词的记忆程度.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_36.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_37.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; a. 根据自己的单词的熟悉程度选择相应的选项, 亦称打分. 从熟悉到陌生, 一共四个级别.<br />
&nbsp; &nbsp; b. 选择相应的'熟悉度'后, 将在下方显示单词的解释. 此功能可以在设置中关闭或者开启;<br />
&nbsp; &nbsp; c. 此时可以通过'正确'和'错误'来判断自己的打分是否正确, 通过此判定及其打分的情况, 应用决定当前单词的'分数', 以决定此单词下次出现的时机.<br />
<br />
&nbsp; &nbsp; 单词被加载,或者点击单词时, 应用会调用TTS播放单词发音。<br />
<br />
2. 生词本(Vocab)功能<br />
&nbsp; &nbsp; 在背诵界面中可以看到, 动作栏上的图标由'Search'变为'Vocab'了, 此时点击图标, 将进入到如下单词本(Vocab)界面中.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_38.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_39.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单词本界面中列出了所有的'生词'. 点击菜单, 可以按照单词的字母顺序或者分数进行排序显示, <strike>亦可安装ESL课程/单词分数/添加时间进行分组显示.</strike>(分组还没完成, 先写着, 下次就可以懒了.)<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_40.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_42.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单击菜单中的'Edit', 可以删除生词本中的单词.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_41.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 在生词本界面中可以看到, 动作栏中的快捷图标已经变为'Reciting', 此时点击图标, 可以快速返回到背诵界面. 由于生词本是通过背诵界面进入的, 所以当生词本中含有单词时, 点击返回按钮就返回到背诵界面.<br /><br />
3. 背诵和生词本的相关配置<br />&nbsp; &nbsp; 如下图所示, EL中新增相应的配置项以支持的背诵和生词本功能.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_43.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; a. 'Automatically Speak Words': 自动播放单词发音. 在背诵界面中, 当单词加载到界面中时, 自动播放其发音.<br />&nbsp; &nbsp; b. 'Random Load Words': 随机加载单词. 默认情况下, EL根据单词的'分数'大小决定加载的顺序;<br />&nbsp; &nbsp; c. 'Show Word Explanation': 显示单词解释. 当选择了单词的'熟悉度'后, EL将显示单词的解释; 如果关闭此选项, 在选择后, EL将判定选择'正确', 并直接加载下一个单词;<br />&nbsp; &nbsp; d. 'Double Check Result': 再次判定选择的结果. 在选择单词'熟悉度'后, 用户可以再次判定选择是否正确, 以此来调整单词的分数; 如果关闭此项, 界面中将只现在'正确'选择项;<br />&nbsp; &nbsp; e. 'Auto-Delete High Score Words': 自动删除高分单词. 随着对单词的'熟悉', 单词的分数将不断增长, 当增长至指定值时(目前为90), 通过此选项可以自动删除这些高分单词.<br />
<br />
&lt;---- Raspberry Pi ----&gt;<br />
<br />
&nbsp; &nbsp; 这段日子多数时间都在搞树莓派， 基本搞定了， 顺便又学了遍Python。 唉， 真是&#8216;黑瞎子掰苞米&#8217;啊， 学一个都一个...前天要在linux写段C++, 竟然定义个简单的class都来了个&#8216;语法错误&#8217;， 这才半年不写啊, 感觉有些废了。。。<br />
&nbsp; &nbsp; 晚上很忙, 自然像EL的内容包'优先级'不高的事情, 就先慢慢排吧, 功能搞定先(没人买,LP拒绝帮忙敲, 5555~~)... &nbsp;这两天尽力补上个&#8220;十月免费&#8221;包. 但我打算做一些只包含一篇ESL课程的包， 想来这样体积小， 可以便于下载。<br />
&nbsp; &nbsp;<img src ="http://www.cppblog.com/codejie/aggbug/203461.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-28 14:49 <a href="http://www.cppblog.com/codejie/archive/2013/09/28/203461.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Compatible PopupMenu Class</title><link>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 14 Sep 2013 09:20:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203235.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/14/203235.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203235.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203235.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 大约两周前, 在修复EL的<a href="http://www.cppblog.com/codejie/archive/2013/09/02/202941.html">2.3.x的兼容问题</a>时, 有一个是PopupMenu相关的, 这个类在API9才有的, 那么在2.3.x平台上就没法用了. 为了能够兼容, 当时用了PopupWindow.<br />&nbsp; &nbsp; 这两天考虑到PopupMenu后面还是很需要的, 且以前的封装仅仅是为了实现播放快速跳转的兼容功能, 没考虑再使用, 所以昨晚重新封装了下, 这样更加方便和实用了.<br /><br />&nbsp; &nbsp; 实现的方式还是在2.3.x平台下使用PopupWindow来实现PopupMenu的功能, 但这次只需要在xml下定义个Menu资源就好了, 不再需要另行准备个PopupWindow所需的Layout资源了, 方便再次使用.<br />&nbsp; &nbsp; 4.x平台下直接就使用Menu资源初始PopupMenu了, 而使用PopupWindow时, 就需要先解析Menu资源文件, 得到所需的Item的ID和Title, 然后使用这些数据初始PopupWindow的View.<br /><br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_33.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_32.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp; 封装的ELPopupMenu代码如下:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #0000FF; ">package</span>&nbsp;jie.android.el.view;<br /><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.io.IOException;<br /><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;java.util.ArrayList;<br /><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;org.xmlpull.v1.XmlPullParserException;<br /><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;jie.android.el.R;<br /><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;jie.android.el.utils.Utils;<br /><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.Context;<br /><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.content.res.XmlResourceParser;<br /><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.graphics.drawable.BitmapDrawable;<br /><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.util.AttributeSet;<br /><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.Gravity;<br /><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.Menu;<br /><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.MenuItem;<br /><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View;<br /><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.View.OnClickListener;<br /><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.view.ViewGroup.LayoutParams;<br /><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.Button;<br /><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.LinearLayout;<br /><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupMenu;<br /><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupMenu.OnMenuItemClickListener;<br /><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #0000FF; ">import</span>&nbsp;android.widget.PopupWindow;<br /><span style="color: #008080; ">&nbsp;24</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ELPopupMenu&nbsp;{<br /><span style="color: #008080; ">&nbsp;26</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;MenuData&nbsp;{<br /><span style="color: #008080; ">&nbsp;28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;id;<br /><span style="color: #008080; ">&nbsp;29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;title;<br /><span style="color: #008080; ">&nbsp;30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;MenuData(<span style="color: #0000FF; ">int</span>&nbsp;id,&nbsp;String&nbsp;title)&nbsp;{<br /><span style="color: #008080; ">&nbsp;32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.id&nbsp;=&nbsp;id;<br /><span style="color: #008080; ">&nbsp;33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.title&nbsp;=&nbsp;title;<br /><span style="color: #008080; ">&nbsp;34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;36</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">interface</span>&nbsp;OnItemClickListener&nbsp;{<br /><span style="color: #008080; ">&nbsp;38</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;OnClick(<span style="color: #0000FF; ">int</span>&nbsp;item);<br /><span style="color: #008080; ">&nbsp;39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Context&nbsp;context;<br /><span style="color: #008080; ">&nbsp;42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resMenuId;<br /><span style="color: #008080; ">&nbsp;43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;View&nbsp;parent;<br /><span style="color: #008080; ">&nbsp;44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;popup;<br /><span style="color: #008080; ">&nbsp;45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;OnItemClickListener&nbsp;listener;<br /><span style="color: #008080; ">&nbsp;46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;ELPopupMenu(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resMenuId,&nbsp;View&nbsp;parent,&nbsp;OnItemClickListener&nbsp;listener)&nbsp;{<br /><span style="color: #008080; ">&nbsp;48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.context&nbsp;=&nbsp;context;<br /><span style="color: #008080; ">&nbsp;49</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.resMenuId&nbsp;=&nbsp;resMenuId;<br /><span style="color: #008080; ">&nbsp;50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.parent&nbsp;=&nbsp;parent;<br /><span style="color: #008080; ">&nbsp;51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.listener&nbsp;=&nbsp;listener;<br /><span style="color: #008080; ">&nbsp;52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make();<br /><span style="color: #008080; ">&nbsp;54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;55</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;make()&nbsp;{<br /><span style="color: #008080; ">&nbsp;57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">&nbsp;58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&nbsp;=&nbsp;makePopupMenu(context,&nbsp;resMenuId,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&nbsp;=&nbsp;makePopupWindow(context,&nbsp;resMenuId,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;63</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;makePopupMenu(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId,&nbsp;View&nbsp;parent)&nbsp;{<br /><span style="color: #008080; ">&nbsp;65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu&nbsp;pm&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupMenu(context,&nbsp;parent);<br /><span style="color: #008080; ">&nbsp;66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenuInflater().inflate(resId,&nbsp;pm.getMenu());<br /><span style="color: #008080; ">&nbsp;67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.setOnMenuItemClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnMenuItemClickListener()&nbsp;{<br /><span style="color: #008080; ">&nbsp;68</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">&nbsp;70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onMenuItemClick(MenuItem&nbsp;menu)&nbsp;{<br /><span style="color: #008080; ">&nbsp;71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">&nbsp;72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.OnClick(menu.getItemId());<br /><span style="color: #008080; ">&nbsp;73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">true</span>;<br /><span style="color: #008080; ">&nbsp;74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">&nbsp;75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">false</span>;<br /><span style="color: #008080; ">&nbsp;76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br /><span style="color: #008080; ">&nbsp;78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pm;<br /><span style="color: #008080; ">&nbsp;80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;81</span>&nbsp;<br /><span style="color: #008080; ">&nbsp;82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;getAttributeIntValue(Context&nbsp;context,&nbsp;String&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Integer.valueOf(resId.substring(1));<br /><span style="color: #008080; ">&nbsp;84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;getAttributeStringValue(Context&nbsp;context,&nbsp;String&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;id&nbsp;=&nbsp;Integer.valueOf(resId.substring(1));<br /><span style="color: #008080; ">&nbsp;87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;context.getString(id);<br /><span style="color: #008080; ">&nbsp;88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;ArrayList&lt;MenuData&gt;&nbsp;analyseMenuResource(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId)&nbsp;{<br /><span style="color: #008080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;93</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&lt;MenuData&gt;&nbsp;menu&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ArrayList&lt;MenuData&gt;();<br /><span style="color: #008080; ">&nbsp;94</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;95</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlResourceParser&nbsp;parser&nbsp;=&nbsp;context.getResources().getXml(resId);<br /><span style="color: #008080; ">&nbsp;96</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br /><span style="color: #008080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;event&nbsp;=&nbsp;parser.next();<br /><span style="color: #008080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(event&nbsp;!=&nbsp;XmlResourceParser.END_DOCUMENT)&nbsp;{<br /><span style="color: #008080; ">100</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(event&nbsp;==&nbsp;XmlResourceParser.START_TAG)&nbsp;{<br /><span style="color: #008080; ">101</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(parser.getName().equals("item"))&nbsp;{<br /><span style="color: #008080; ">102</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;menu.add(<span style="color: #0000FF; ">new</span>&nbsp;MenuData(getAttributeIntValue(context,&nbsp;parser.getAttributeValue(Utils.NS_ANDROID,&nbsp;"id")),<br /><span style="color: #008080; ">103</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getAttributeStringValue(context,&nbsp;parser.getAttributeValue(Utils.NS_ANDROID,&nbsp;"title"))));<br /><span style="color: #008080; ">104</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">105</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">106</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event&nbsp;=&nbsp;parser.next();<br /><span style="color: #008080; ">107</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">108</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">109</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(XmlPullParserException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">110</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">112</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br /><span style="color: #008080; ">113</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;catch&nbsp;block</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br /><span style="color: #008080; ">115</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">116</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">117</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;menu;<br /><span style="color: #008080; ">118</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">119</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">120</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Object&nbsp;makePopupWindow(Context&nbsp;context,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;resId,&nbsp;View&nbsp;parent)&nbsp;{<br /><span style="color: #008080; ">121</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ArrayList&lt;MenuData&gt;&nbsp;menu&nbsp;=&nbsp;analyseMenuResource(context,&nbsp;resId);<br /><span style="color: #008080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(menu.size()&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">124</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #008080; ">125</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">126</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">127</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnClickListener&nbsp;l&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;OnClickListener()&nbsp;{<br /><span style="color: #008080; ">128</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br /><span style="color: #008080; ">129</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onClick(View&nbsp;v)&nbsp;{<br /><span style="color: #008080; ">130</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.OnClick(v.getId());<br /><span style="color: #008080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">133</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">134</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupWindow)popup).dismiss();<br /><span style="color: #008080; ">135</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">136</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">137</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">138</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">139</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AttributeSet&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"LinearLayout",&nbsp;R.id.linearLayout1);<br /><span style="color: #008080; ">140</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinearLayout&nbsp;ll&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;LinearLayout(context,&nbsp;attrs);<br /><span style="color: #008080; ">141</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">142</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;pos&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">143</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(MenuData&nbsp;data&nbsp;:&nbsp;menu)&nbsp;{<br /><span style="color: #008080; ">144</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos&nbsp;==&nbsp;0)&nbsp;{<br /><span style="color: #008080; ">145</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button1);<br /><span style="color: #008080; ">146</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(pos&nbsp;==&nbsp;menu.size()&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">147</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button3);<br /><span style="color: #008080; ">148</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">149</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attrs&nbsp;=&nbsp;Utils.getAttributeSet(context,&nbsp;R.layout.layout_popmenu_window_template,&nbsp;"Button",&nbsp;R.id.button2);<br /><span style="color: #008080; ">150</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">151</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">152</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;btn&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Button(context,&nbsp;attrs);<br /><span style="color: #008080; ">153</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setId(data.id);<br /><span style="color: #008080; ">154</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setText(data.title);<br /><span style="color: #008080; ">155</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btn.setOnClickListener(l);<br /><span style="color: #008080; ">156</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">157</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ll.addView(btn,&nbsp;ll.generateLayoutParams(attrs));<br /><span style="color: #008080; ">158</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">159</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++&nbsp;pos;<br /><span style="color: #008080; ">160</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">161</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">162</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupWindow&nbsp;pw&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupWindow(ll);<br /><span style="color: #008080; ">163</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">pw.setWidth(250);</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">164</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setWidth(LayoutParams.WRAP_CONTENT);<br /><span style="color: #008080; ">165</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setHeight(LayoutParams.WRAP_CONTENT);<br /><span style="color: #008080; ">166</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setFocusable(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">167</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setOutsideTouchable(<span style="color: #0000FF; ">true</span>);<br /><span style="color: #008080; ">168</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pw.setBackgroundDrawable(<span style="color: #0000FF; ">new</span>&nbsp;BitmapDrawable());<br /><span style="color: #008080; ">169</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">170</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;pw;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">171</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">172</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">173</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;show()&nbsp;{<br /><span style="color: #008080; ">174</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show(Gravity.LEFT&nbsp;|&nbsp;Gravity.BOTTOM,&nbsp;16,&nbsp;64);<br /><span style="color: #008080; ">175</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">176</span>&nbsp;<br /><span style="color: #008080; ">177</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;show(<span style="color: #0000FF; ">int</span>&nbsp;gravity,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;x,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;y)&nbsp;{<br /><span style="color: #008080; ">178</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">179</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">180</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupMenu)popup).show();<br /><span style="color: #008080; ">181</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">182</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((PopupWindow)popup).showAtLocation(parent,&nbsp;gravity,&nbsp;x,&nbsp;y);<br /><span style="color: #008080; ">183</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">184</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">185</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">186</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">187</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setItemEnabled(<span style="color: #0000FF; ">int</span>&nbsp;item,&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;enabled)&nbsp;{<br /><span style="color: #008080; ">188</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(popup&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">189</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br /><span style="color: #008080; ">190</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Menu&nbsp;menu&nbsp;=&nbsp;((PopupMenu)popup).getMenu();<br /><span style="color: #008080; ">191</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItem&nbsp;sub&nbsp;=&nbsp;menu.findItem(item);<br /><span style="color: #008080; ">192</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(sub&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br /><span style="color: #008080; ">193</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sub.setEnabled(enabled);<br /><span style="color: #008080; ">194</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">195</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">196</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;p&nbsp;=&nbsp;((PopupWindow)popup).getContentView();<br /><span style="color: #008080; ">197</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;View&nbsp;v&nbsp;=&nbsp;p.findViewById(item);<br /><span style="color: #008080; ">198</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.setEnabled(enabled);<br /><span style="color: #008080; ">199</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">200</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">201</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">202</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">203</span>&nbsp;}<br /><span style="color: #008080; ">204</span>&nbsp;</div><br /><br />&nbsp; &nbsp; 初始PopupWindow的View的资源模板文件如下:<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000FF; ">?&gt;</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">LinearLayout&nbsp;</span><span style="color: #FF0000; ">xmlns:android</span><span style="color: #0000FF; ">="http://schemas.android.com/apk/res/android"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:id</span><span style="color: #0000FF; ">="@+id/linearLayout1"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginLeft</span><span style="color: #0000FF; ">="16dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginRight</span><span style="color: #0000FF; ">="16dp"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:background</span><span style="color: #0000FF; ">="@android:color/darker_gray"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;android:orientation</span><span style="color: #0000FF; ">="vertical"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">&gt;</span><br /><span style="color: #008080; ">10</span>&nbsp;<br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button1"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginTop</span><span style="color: #0000FF; ">="4dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">16</span>&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button2"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">Button<br /></span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF0000; ">android:id</span><span style="color: #0000FF; ">="@+id/button3"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_width</span><span style="color: #0000FF; ">="match_parent"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_height</span><span style="color: #0000FF; ">="wrap_content"</span><span style="color: #FF0000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #FF0000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;android:layout_marginBottom</span><span style="color: #0000FF; ">="0dp"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><br /><span style="color: #008080; ">27</span>&nbsp;<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">LinearLayout</span><span style="color: #0000FF; ">&gt;</span></div><br /><br /><br /><br /><br /><img src ="http://www.cppblog.com/codejie/aggbug/203235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-14 17:20 <a href="http://www.cppblog.com/codejie/archive/2013/09/14/203235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.3.0 Release</title><link>http://www.cppblog.com/codejie/archive/2013/09/07/203062.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 07 Sep 2013 11:56:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/07/203062.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/203062.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/07/203062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/203062.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/203062.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>, <a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a>,&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a><br />
     </li>
</ul>
<br />
&nbsp; &nbsp; 不清楚有几人下载用过EL? 偶尔还是收到了些问题, 唉, 不稳定时期只能先辛苦大家了...EL这两周我一直在改, 尤其是android 2.3.x兼容问题, 这个耗了很多时间...上周修正了两个兼容问题, 本周计划继续添加两个新功能, 然而在测试时却又发现了N多问题, 唉, 改吧...因为新增了个功能, 所以这次release版本就也升了...<br />
<br />
&nbsp; &nbsp; EL Release 1.3.0 新增/修改了如下内容:<br />
&nbsp; &nbsp; 1. 新增'check for new packages';<br />
&nbsp; &nbsp; 2. 修正切换ESL播放异常;<br />
&nbsp; &nbsp; 3. 修正2.3.x下的下载兼容问题;<br />&nbsp; &nbsp; 4. 更多<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">内容包信息</a>;<br />
<br />
&nbsp; &nbsp; 1.&nbsp;新增'check for new packages'<br />
&nbsp; &nbsp; 点开'About'界面, 如下图示. 新增了'Check for new packages'按钮, 点击此按钮, EL将取回EL内容包的更新列表.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_31.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 更新列表含有三列内容: 内容包的序号, 更新时间和ESL课程.<br />
<br />
&nbsp; &nbsp; 2. 修正切换ESL播放异常<br />
&nbsp; &nbsp; EL播放一直不稳定, 尤其是2.3.x下, 改了很多次. 甚至将AsyncTask都改成了Thead/Runnable, 因为想着这个Async只能在UI下使用, Service下使用怕不稳定. 但修改后也就2.3.x下好点, 4.x却没有变化. 一发狠, 重新修改了播放时UI跟Service的间的状态通知. 这下可算稳定点了...<br />
<br />
&nbsp; &nbsp; 4. 修正2.3.x下的下载兼容问题<br />
&nbsp; &nbsp; 这周弄个2.3.5的GT-I9100做测试, 才发现2.3.x平台下根本就不能下载内容包! 测试代码才发现原来2.3.x下的DownloadManager跟4.x平台在处理'默认'下载上有差异的. 现在好了, 2.3.x终于可以正常下载了.<br />
<br />
&nbsp; &nbsp;总的来说, EL Release 1.3.0终于使得在android 2.3.x上可以正常运行EL了.<img src ="http://www.cppblog.com/codejie/aggbug/203062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-07 19:56 <a href="http://www.cppblog.com/codejie/archive/2013/09/07/203062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.2.2 Release</title><link>http://www.cppblog.com/codejie/archive/2013/09/02/202969.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Mon, 02 Sep 2013 14:48:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/02/202969.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202969.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/02/202969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202969.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://item.taobao.com/item.htm?id=19680021933">关注EL内容包</a>,以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a></li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">使用说明文档</a><br />
     </li>
</ul>
<br />
&nbsp; &nbsp; EL 1.2.2 Release了, 主要针对android 2.3.x的兼容问题做了修改, <a href="http://www.cppblog.com/codejie/archive/2013/09/02/202941.html">修改文档看这里</a>.<br />
<br />
&nbsp; &nbsp; 今天测试了下, 2.3.x下基本没问题了, 但ESL音频播放还是不稳定, 比如快速next, next, 没点几下就会crash. 这应该是播放时的状态没有控制好. 目前EL采取的是Service侧负责播放, UI侧只是展示播放状态的方式, 这样做的好处是当UI被切换, 音频播放不会被打断. 这样的问题是要控制好播放状态和两者的状态交换; 比如说, 播放时, UI从后台切入后, 应能正确显示当前播放状态.<br />
<br />
&nbsp; &nbsp; 这个问题明天再看看, 先把修正2.3.x兼容问题的版本先放出来, 这样某人2.3的G8就可以试试了...<br />
&nbsp; &nbsp; 各位碰到啥问题就说啊...有问题赶紧改, 不然后面改起来更难..<img src ="http://www.cppblog.com/codejie/aggbug/202969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-02 22:48 <a href="http://www.cppblog.com/codejie/archive/2013/09/02/202969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : be able to support 2.3.x again</title><link>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 01 Sep 2013 16:22:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202941.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/09/02/202941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202941.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202941.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; EL 1.2中新增了词典功能, 急着release, 就没有在2.3.x下测试 (当然了, 我的G7被我刷成4.2.2之后, 也没有2.3.x的环境了..), 编译没有问题, 4.x上都OK, 然后就release了...&nbsp;唉, 债总是要连本带利地归还的, 现实如此, 敲字亦是如此啊...因此这个周末, 整个周末都在修改EL无法在android 2.3.x上运行的问题.<br />&nbsp; &nbsp; 知道Android有版本碎化问题, 只是没想到这么'细节', 不碰到那真是根本想不到啊...还是前年做IOS好, 就没考虑版本问题,当然也可能没碰到.&nbsp;不吐槽了, 敲字的人嘛, 抱怨不能解决问题啊, 还得靠review/debug...<br />&nbsp;<br />&nbsp; &nbsp; 这次发现了两处不兼容的地方, 一个是java语言层面的, 另外一个则是android控件相关的.<br /><br />&nbsp; &nbsp; 1. ByteBuffer<br />&nbsp; &nbsp; EL在从Lingoes词典文件中提取数据时, 需要使用InflaterInputStream对象解压原始数据, 代码如下:<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;decompressBlock(ByteBuffer&nbsp;in,&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;size,&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;out)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;Inflater&nbsp;inflater&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Inflater();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">byte</span>[]&nbsp;a&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;">if</span><span style="color: #ff0000;">&nbsp;(in.hasArray())&nbsp;{</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #ff0000;">=</span><span style="color: #ff0000;">&nbsp;in.array();</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #ff0000;">else</span><span style="color: #ff0000;">&nbsp;{</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #ff0000;">=</span>&nbsp;<span style="color: #ff0000;">new</span>&nbsp;<span style="color: #ff0000;">byte</span><span style="color: #ff0000;">[size];</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.position(</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">);</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.get(a,&nbsp;</span><span style="color: #ff0000;">0</span><span style="color: #ff0000;">,&nbsp;size);</span><br /><span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;InflaterInputStream&nbsp;stream&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;InflaterInputStream(<span style="color: #0000FF; ">new</span>&nbsp;ByteArrayInputStream(a,&nbsp;0,&nbsp;size),&nbsp;inflater,&nbsp;size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(stream.read(out)&nbsp;&gt;&nbsp;0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inflater.end();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 此对象的一个传入参数为InputStream, 这样正好将ByteButter对象数组化为byte[]后, 构造出一个ByteArrayInputStream实例传入. 那么ByteBuffer常用且推荐的方式就是直接调用其array()方法, 这样就无需在申请和构造个新的byte[]空间了.<br />&nbsp; &nbsp; 问题就在这里, 在android 2.3.x中, ByteBuffer对象是不支持直接数组化的, 在调用arry()时, 会抛出NotSupportedException异常的. 因此为了保持兼容就需要在数组化前使用hasArray()方法检查是否可以数组化, 如果不能, 那就要重新申请数组空间了.<br /><br />&nbsp; &nbsp; 2. PopupMenu<br />&nbsp; &nbsp; EL在播放时, 支持快速跳转到ESL课程的指定位置上. 如下图所示.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_29.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_30.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; 指定位置的选择菜单是通过PopupMenu实现的, 但这个控件是在API 11才有的, 意味着低于HONEYCOMB版本的2.3.x平台是没法使用的. 实际这个问题可以早点发现的, 但我就是懒了, 以后relase前, 还是需要运行下Android Lint的.<br />&nbsp; &nbsp; 上图可以看出在两种平台下, 这个'PopupMenu'是不一样的, 那是因为2.3.x平台上, 我是用PopupWindow控件模拟了类似PopupMenu的功能. 以后有时间看看能不能搞的UI也一样就好了.<br />&nbsp; &nbsp; 这种控件上的不兼容, 可以使用不同平台下运行不同代码来解决.<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;showPopupMenu(View&nbsp;v)&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(android.os.Build.VERSION.SDK_INT&nbsp;&gt;=&nbsp;android.os.Build.VERSION_CODES.HONEYCOMB)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopupMenu&nbsp;pm&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;PopupMenu(getELActivity(),&nbsp;v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenuInflater().inflate(R.menu.fragment_show_pop,&nbsp;pm.getMenu());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(0).setEnabled(audioSlowDialog&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(1).setEnabled(audioExplanation&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.getMenu().getItem(2).setEnabled(audioFastDialog&nbsp;!=&nbsp;-1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.setOnMenuItemClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnMenuItemClickListener()&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">boolean</span>&nbsp;onMenuItemClick(MenuItem&nbsp;item)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;onNavigate(item.getItemId());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pm.show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;ShowPopWindow&nbsp;win&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ShowPopWindow(getELActivity(), v);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(0,&nbsp;(audioSlowDialog&nbsp;!=&nbsp;-1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(1,&nbsp;(audioExplanation&nbsp;!=&nbsp;-1));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setItemEnable(2,&nbsp;(audioFastDialog&nbsp;!=&nbsp;-1));<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.setOnClickListener(<span style="color: #0000FF; ">new</span>&nbsp;OnClickListener()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;onClick(View&nbsp;v)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onNavigate(v.getId());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.dismiss();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 本来想着更新下修改好的EL版本赶紧release了, 毕竟2.3.x还占有30%左右的份额, 是不能放弃的部分. 但还是有些心虚, 所以啊, 再检查下, 明天再说吧..(整个周末都在fix兼容问题, 头昏眼花啊, 睡觉去了...唉, 毕竟java没有C++玩的那么久, 很多基本的语言级别的问题都不清楚, 还要多敲敲才行啊..)<img src ="http://www.cppblog.com/codejie/aggbug/202941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-09-02 00:22 <a href="http://www.cppblog.com/codejie/archive/2013/09/02/202941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Content Packages</title><link>http://www.cppblog.com/codejie/archive/2013/08/27/202547.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 27 Aug 2013 15:32:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/27/202547.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202547.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/27/202547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202547.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://item.taobao.com/item.htm?id=19680021933">关注EL内容包</a>, <strike>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a></strike></li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a><br />
     </li>
</ul>
<br />
<strong>内容包总汇<br />
<br />
<table border="1" cellpadding="2">
     <tbody>
         <tr>
             <td>序列号</td>
             <td>ESL课程</td>
             <td>更新日期</td>
             <td>说明</td>
             <td>Request Code/Check Code</td>
         </tr>
         <tr>
             <td style="text-align: center;">&nbsp;8</td>
             <td><a href="https://onedrive.live.com/redir?resid=3BAF6CAC74F7919!132&amp;authkey=!AKE7jd73ZuYbW8I&amp;ithint=file%2c.zip">Lesson 131 - 135</a></td>
             <td>&nbsp;2014/02/22</td>
             <td><a href="https://onedrive.live.com/redir?resid=3BAF6CAC74F7919!132&amp;authkey=!AKE7jd73ZuYbW8I&amp;ithint=file%2c.zip">二月免费包&nbsp;</a></td>
             <td>900001300603/0000</td>
         </tr>
         <tr>
             <td style="text-align: center;">&nbsp;7</td>
             <td>Lesson 16</td>
             <td>&nbsp;2013/10/01</td>
             <td>十月免费包&nbsp;</td>
             <td>900001300343/0000</td>
         </tr>
         <tr>
             <td style="text-align: center;">&nbsp;6</td>
             <td>Lesson 126 - 130</td>
             <td>&nbsp;2013/12/10</td>
             <td>十二月免费包</td>
             <td>900001300563/0000</td>
         </tr>
         <tr>
             <td style="text-align: center; ">5</td>
             <td>Lesson 121 - 125<br />
             </td>
             <td>&nbsp;2013/09/09</td>
             <td>十一月免费包</td>
             <td>900001300453/0000</td>
         </tr>
         <tr>
             <td style="text-align: center; ">4</td>
             <td>Lesson 116 - 120</td>
             <td>2013/08/27</td>
             <td>九月免费包</td>
             <td>900001300233/0000</td>
         </tr>
         <tr>
             <td style="text-align: center; ">3</td>
             <td>Lesson 111 - 115</td>
             <td>2013/08/24</td>
             <td>Release开门红包</td>
             <td>900001300123/0000</td>
         </tr>
         <tr>
             <td style="text-align: center; ">1</td>
             <td>Lesson 15</td>
             <td>2013/08/15</td>
             <td>EL测试包 (900001300013/0000)</td>
             <td>900001300013/0000</td>
         </tr>
         <tr>
             <td style="text-align: center; ">0</td>
             <td>Lesson 1</td>
             <td>2013/08/15</td>
             <td>EL内置</td>
             <td></td>
         </tr>
     </tbody>
</table>
<br />
<br />
</strong><br />
&nbsp; &nbsp; 刚刚做好了EL的ESL第116课到120课的内容包, 正在上传, 网络死慢, 正好说说内容包的事情.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_28.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 现在一共做好了四个EL的内容包:<br />
&nbsp; &nbsp; 1. ESL第一课, 内置在EL里面了; 启动就能看到;<br />
&nbsp; &nbsp; 2. ESL第十五课, 可以Free下载的, 算是测试包了;<br />
&nbsp; &nbsp; 3. ESL第111课到115课, 终于在taobao.com上卖了..但实际也是Free的, <a href="http://www.cppblog.com/codejie/archive/2013/08/24/202720.html">请这里找</a>;<br />
&nbsp; &nbsp; 4. ESL第116课到120课, 哈哈, 这个包真的在taobao.com上了...<br />
<br />
&nbsp; &nbsp; 目前taobao.com上的一个包是RMB2, 不知好卖不...一会要再加个'VIP'包 -- RMB10包圆全部内容包! 哈哈, 这个狠吧...还有呢, 为了更多的下载, 一个月会标记或推出一个Free包, 到时会在这里贴上request code的. 一个月能听懂五篇ESL课程真的了不起了, 至少每篇我要听十多遍才行..<br />
&nbsp; &nbsp; 整体计划至少出五十个EL内容包, 这样一个包内含有五篇ESL课程, 这五十乘以五等于...嗯, 也不少哦...<br />
<br />
&nbsp; &nbsp; 内容包的获取过程如下:<br />
&nbsp; &nbsp; 1. 淘宝中选择购买所需内容包;<br />
&nbsp; &nbsp; 2. 购买后留下邮件地址, 随后会收到一封来自el.codejie@gmail.com的邮件, 其内附有下载/安装内容包所须的'Request Code'和'Check Code';<br />
&nbsp; &nbsp; 3. 确认当前手机能够通过WIFI方法连接到Internet上<br />
&nbsp; &nbsp; 4. 在EL的'Download'界面中输入相应的'Request Code'和'Check Code'后,点击'Submit'按钮;<br />
&nbsp; &nbsp; 5. EL开始下载内容包, 并在下载成功后自动安装;<br />
&nbsp; &nbsp; 6. 安装完成后, 可在内容列表中看到所购买的内容包课程.<br />
<br />
&nbsp; &nbsp; 再闲扯下内容包的制作过程吧, <br />
&nbsp; &nbsp; 1. 先到ESLPod.com上下载要制作内容的mp3音频文件, 同时查找相应的script文档网页;<br />
&nbsp; &nbsp; 2. 拷贝内容文档, 并按照网页中高亮内容添加EL所识标识到文档中, 再添加自己的高亮部分标识到文档中;<br />
&nbsp; &nbsp; 3. 然后将准备好的文档和其它数据存放到数据库中;&nbsp;等mp3文件下载完成, 一起压缩打包;<br />
&nbsp; &nbsp; 4. 拷贝的我的G7上验证, 再上传到指定服务器中;<br />
&nbsp; &nbsp; 5. 准备下载链接, 并记录到packages文档中.<br />
<br />
&nbsp; &nbsp; 目前一个内容压缩包中含有五篇ESL课程和对应的mp3文件, 总体文件尺寸在三十五到四十五兆间. 一个压缩包的制作时间大约在一小时到一个半小时间, 因为每一篇都要从头看到尾...目前看,争取一周做三到五个吧, 毕竟还要留点时间改改EL的Bugs不...<img src ="http://www.cppblog.com/codejie/aggbug/202547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-27 23:32 <a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.2.1 hotfix</title><link>http://www.cppblog.com/codejie/archive/2013/08/26/202782.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Mon, 26 Aug 2013 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/26/202782.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202782.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/26/202782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202782.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202782.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://item.taobao.com/item.htm?id=19680021933">关注EL内容包</a></li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html">查看使用说明</a><br />
     </li>
</ul>
<br />
&nbsp; &nbsp; EL 1.2.1 hotfix :<br />
&nbsp; &nbsp;&nbsp;<br />
&nbsp; &nbsp; 1. 修正Bug - 播放中切换应用, 状态栏中提示不正确;<br />
<br />
&lt;---- 疲惫的分割线 ----&gt;<br />
&nbsp; &nbsp; 过了个周末, 却感觉更加疲惫, 可能是连续敲字的日子太久了? 还是真的年轻不再了? 唉, 敲字也是体力活啊...<br />
<br />
&nbsp; &nbsp; 今天按照计划应该整理出ESL的116到120课的内容包的, 但那包弄起来比敲字闹心多了, 心神不定地恍惚了一天, 简单的文本都没整理完..算, 反正还有个111到115的Free包, 先用着吧, 睡觉...<img src ="http://www.cppblog.com/codejie/aggbug/202782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-26 22:19 <a href="http://www.cppblog.com/codejie/archive/2013/08/26/202782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : ESL with LAC</title><link>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 24 Aug 2013 14:24:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202526.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/24/202526.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202526.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202526.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br />
<ul>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/27/202547.html">关注EL内容包</a>, <strike><a href="http://item.taobao.com/item.htm?spm=a1z10.3.w4002-3416209737.30.lj0W32&amp;id=19680021933">淘宝二元包</a>以及<a href="http://item.taobao.com/item.htm?id=19886621585">十元全包</a></strike>,&nbsp;</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202525.html">查看EL闲扯贴</a>, <a href="http://www.cppblog.com/codejie/archive/2013/08/18/202625.html">1.1 alpha说明</a>, <a href="http://www.cppblog.com/codejie/archive/2013/08/23/202720.html">1.2 Release说明</a>, <a href="http://www.cppblog.com/codejie/archive/2013/09/07/203062.html">1.3.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/09/28/203461.html">1.4.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html">1.5.0</a>, <a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html">1.6.0</a><br />
     </li>
</ul>
<br />
<strong>说明文档</strong><br />
0. EL是什么?<br />
&nbsp; &nbsp; EL (ESL with LAC) 是一个android平台上的应用, 其可将ESL (www.eslpod.com) 的课程加载到应用中, 边看边听; 且内置了Lingoes(www.lingoes.net)的Vicon English-Chinese词典, 能够实时查看某些单词的此意. 使用EL可以随时随地地看英语, 听英语, 对学习英语单词及锻炼英语的听力很有帮助.<br />
<br />
<div>1. 下载安装<br />
&nbsp; &nbsp; EL支持从android 2.3 到android 4.3版本.</div>
<div>&nbsp; &nbsp; 目前EL只在这里提供下载, 一时应该不会放到各个应用中心, 这里还请各位多多传播扩散呀. 下载到本地的文件名应为EL.apk, 安装到android手机即可.应用安装后的图标如下所示:<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_5.png" border="0" alt="" width="128" height="129" /></div>
<div></div>
<div><br />
2. 启动过程</div>
<div>&nbsp; &nbsp; 点击EL应用图标启动EL后, EL会启动并连接自身的服务进程, 如下图所示. 在第一次启动时, 由于服务进程需要初始化本地词典数据库, 启动时间会比较长,大约在3~5秒间. 再次启动时,进度条应该只是一闪而过.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_1.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; EL启动后, 如果发现内容列表为空, 将会自动从自带的压缩包中加载ESL的第一篇内容 -- 'ESL Introduction'. 此时应用界面如下所示. 当压缩包导入到EL中后,在系统状态栏中有相应的提示信息显示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_2.png" border="0" alt="" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_3.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div><br />
3. 使用说明</div>
<div>&nbsp; &nbsp; 在内容列表中,点击需要查看/播放的ESL课程记录, EL将显示指定课程的内容文本, 并自动播放相应的mp3音频文件.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_6.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_8.png" border="0" alt="" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; ESL课程除早期的课程只有两部分外, 一般包括三部分; 先是慢速读遍课程内容, 然后是对内容的讲解部分, 最后是正常语速再读遍课程内容. 如上图所示EL会显示课程内容文本部分, 并高亮显示在ESL讲解中着重提到的单词和句子. EL目前有三种高亮 -- 一是ESL课程原文中高亮的语句中的句子, 颜色如上图中'we try to talk .."部分; 二是原文中高亮语句中的单词, 颜色如'venue'单词所示 ; 三是我自己觉得'难'的单词, 如'especially'(如此可以看出我的E文水平不是?!). 后两种高亮的单词是可以点击查看解释的,如下图所示. &nbsp;此时点击所查单词, TTS会读出此单词发音.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_7.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 第三种高亮方式的来由是因为EL自带的ESL第一课原文中没有任何的'着重'语句,但我又想让大家知道EL还有查词的功能,所以就加上了这种方式. 后面会考虑通过配置方式不显示这种高亮方式的, 也省的制作时需要我一个一个单词去看了...目前,这些高亮部分都需要在内容包制作时完成的, 还没有找到能自动化完成制作的方法, 所以比起敲打EL来说, 内容包的制作怕是要消耗更多的夜晚了. 以后的EL版本中可能会考虑使用用户自选单词方式高亮,或者用户选中单词后显示解释的方式, 但..这些都是后话了...</div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 在播放时, 点击图中播放进度栏,可以打开更多的播放操作选项. 如下图所示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_9.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_10.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div>&nbsp; &nbsp; <br />
&nbsp; &nbsp; 五个按钮分别是'快速移至菜单'(暂未支持), 随机播放, 前一个, 暂停/播放和下一个.&nbsp;</div>
<div></div>
<div>&nbsp; &nbsp; 在播放开始时, EL会在系统状态栏中显示播放通知; 播放完毕后, 将自动删除此通知.<br />
<br />
&nbsp; &nbsp; 播放时点击回退按钮, EL将关闭当前播放, 并返回到内容列表界面去; 如果播放时将EL切换到后台/被其他app覆盖, 或锁屏等, 音频播放不会被关闭. 此时可以通过点击系统状态栏中显示的播放通知, 快速切换会EL的播放界面. 未来将实现在播放通知中直接控制播放, 比如暂停, 关闭, 甚至播放下一篇等.</div>
<div></div>
<div><br />
&nbsp; &nbsp; 2. 词典功能&nbsp;&nbsp;<br />
&nbsp; &nbsp; 在应用的标题栏上有个新的'放大镜'图标, 在除播放界面外的其它界面中点击此图标, 即可进入词典界面; 在播放界面中点击图标不会直接进入到词典界面, 需要点击输入键盘中的'查询'按钮才能进入. 为了可能会改成直接在播放界面中显示查询结果.&nbsp;<br />
&nbsp; &nbsp; 词典界面如下图所示. 此时输入字母, EL将实时显示查询到的单词, 默认一次显示20个. 如果还有更多单词需要显示, 只需向上拖单词列表, EL会自动加载剩余符合条件的单词, 直至显示全部单词. 说明下, 部分设备, 尤其是一些Android平板, 一次肯定不止能显示20个,但不用担心, 只要拖动一次后, EL会自动判断出一次最多能加载多少个单词的.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_20.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_21.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 点击列表中的单词, 将弹出如下解释窗口. 窗口跟内容播放界面中使用的是相同的窗口, 因此点击窗口中的单词, 是同样可以使用TTS发音的.&nbsp;<br />
&nbsp; &nbsp; 弹出窗口的外形做了修改, 不在是圆角方框, 而是充满屏幕宽度的方形框. 这样弹出窗口看起来比较'平', 这概念现在比较'流行'不是?<br />
<br />
&nbsp;4. 应用菜单</div>
<div>&nbsp; &nbsp; 点击EL右上角菜单项,或者按下手机菜单按钮,可见如下EL菜单项.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_35.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div><br />
<span style="font-size: 14px;">5. 背诵(Reciting)功能<br />
</span>&nbsp; &nbsp; 如上图所示, 当在ESL课程显示和词典界面中,&nbsp;单词被查询时, 在应用弹出其解释窗口中可以<strong>通过长时间点击(Long Click)单词的方式将单词添加到生词本</strong>中, 此时应用会显示图中的提示信息, 表示已完成添加操作.<br />
&nbsp; &nbsp; 点击菜单中的'My Vocab'选项, 应用切换到Recting界面. 类似<a href="http://www.cppblog.com/codejie/archive/2010/04/01/111306.html">LingosHook</a>和<a href="http://www.cppblog.com/codejie/archive/2012/08/30/164888.html">LAC</a>的记忆功能, 通过对单词的'熟悉度'打分来判断对单词的记忆程度.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_36.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_37.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; a. 根据自己的单词的熟悉程度选择相应的选项, 亦称打分. 从熟悉到陌生, 一共四个级别.<br />
&nbsp; &nbsp; b. 选择相应的'熟悉度'后, 将在下方显示单词的解释. 此功能可以在设置中关闭或者开启;<br />
&nbsp; &nbsp; c. 此时可以通过'正确'和'错误'来判断自己的打分是否正确, 通过此判定及其打分的情况, 应用决定当前单词的'分数', 以决定此单词下次出现的时机.<br />
<br />
&nbsp; &nbsp; 单词被加载,或者点击单词时, 应用会调用TTS播放单词发音。<br />
<br />
6. 生词本(Vocab)功能<br />
&nbsp; &nbsp; 在背诵界面中可以看到, 动作栏上的图标由'Search'变为'Vocab'了, 此时点击图标, 将进入到如下单词本(Vocab)界面中.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_38.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_39.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单词本界面中列出了所有的'生词'. 点击菜单, 可以按照单词的字母顺序或者分数进行排序显示,&nbsp;<strike>亦可安装ESL课程/单词分数/添加时间进行分组显示.</strike>(分组还没完成, 先写着, 下次就可以懒了.)<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_40.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_42.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 单击菜单中的'Edit', 可以删除生词本中的单词.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_41.png" border="0" alt="" width="240" height="400" /><br />
&nbsp; &nbsp; 在生词本界面中可以看到, 动作栏中的快捷图标已经变为'Reciting', 此时点击图标, 可以快速返回到背诵界面. 由于生词本是通过背诵界面进入的, 所以当生词本中含有单词时, 点击返回按钮就返回到背诵界面.<br />
<br />
7. 配置选项</div>
<div>&nbsp; &nbsp; 选择菜单项中的'Setting'菜单, 在打开的配置界面中, 目前有如下配置项:<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_43.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div><br />
&nbsp; &nbsp; 'Stop After Current' : 当前内容播放完毕后,停止播放; 此项不选中时, 在播放完毕时, EL会自动播放下一篇内容;</div>
<div>&nbsp; &nbsp; 'Random Order&nbsp;Play' : 随机播放; 选中此项, 当播放完毕后, EL会随机播放下一篇内容; 否则将按照安装的ESL课程顺序播放;<br />
&nbsp; &nbsp; 'Don't Automatically Play' : 不自动播放; 选中此项后, 点击内容列表中的课程, 进入播放界面中后, 不再自动播放了;</div>
<div></div>
<div>&nbsp; &nbsp; 'Medium Font Size' : 中等字体显示内容; 选中此项后, EL将使用标准字体尺寸的120%显示内容;</div>
<div>&nbsp; &nbsp; 'Large Font Size' : 大字体显示内容; 选中此项后, EL将使用标准字体尺寸的150%显示内容;<br />
&nbsp; &nbsp; 'Automatically Hide Tile' : 如下面两个图片对比, 选中此项, 播放界面中的Title部分将在1.5秒后自动隐藏,以增大内容显示面积;<br />
&nbsp; &nbsp; &nbsp;'Automatically Speak Words': 自动播放单词发音. 在背诵界面中, 当单词加载到界面中时, 自动播放其发音.<br />
&nbsp; &nbsp; &nbsp;'Random Load Words': 随机加载单词. 默认情况下, EL根据单词的'分数'大小决定加载的顺序;<br />
&nbsp; &nbsp; &nbsp;'Show Word Explanation': 显示单词解释. 当选择了单词的'熟悉度'后, EL将显示单词的解释; 如果关闭此选项, 在选择后, EL将判定选择'正确', 并直接加载下一个单词;<br />
&nbsp; &nbsp; &nbsp;'Double Check Result': 再次判定选择的结果. 在选择单词'熟悉度'后, 用户可以再次判定选择是否正确, 以此来调整单词的分数; 如果关闭此项, 界面中将只现在'正确'选择项;<br />
&nbsp; &nbsp; &nbsp;'Auto-Delete High Score Words': 自动删除高分单词. 随着对单词的'熟悉', 单词的分数将不断增长, 当增长至指定值时(目前为90), 通过此选项可以自动删除这些高分单词.&lt;<br />
<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_23.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_24.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div><br />
&nbsp; &nbsp; Don't Load Extension Words : 在词典界面中查询时, 有些单词是其它单词的'Extension'形式, 比如Searches是Search的'Extension'. 当选中此项时, Searches将不会被查询出来.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_26.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_25.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; 8. 下载选项</div>
<div>&nbsp; &nbsp; 通过下载界面, 可以使用WIFI网络下载更新EL的内容包. 选中菜单项中的'Download'菜单,可打开如下EL下载界面.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_13.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_14.png" border="0" alt="" width="240" height="400" /></div>
<div></div>
<div></div>
<div>&nbsp; &nbsp; 在配置界面中,输入正确的'Request Code'和'Check Code'后,点击'Submit'按钮. EL开始下载指定的内容包, 并在android系统状态栏中显示如下通知信息.</div>
<div></div>
<div>&nbsp; &nbsp; EL的内容包相关信息将在另外的帖子中说明(主要是内容包还没有时间去开始制作...), 目前只能提供一个测试用内容包, 下载信息如下:</div>
<div>&nbsp; &nbsp; Request Code : 0000-3-00-00</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;Check Code : 0-00-00<br />
<br />
<div></div>
</div>
<div>&nbsp; &nbsp; 在下载界面中输入以上数据, 可以通过WIFI下载到ESL的第十五篇内容内容压缩包. 目前EL只能通过WIFI下载内容包, 那是因为内容包比较大, 一篇的大小在七到八兆间. 我曾计划十篇一个包, 那就要八九十兆了, 后来放到五篇一个包,也要四十兆左右, 所以还是用WIFI方式下载比较好. 如果需要, 以后可以添加配置, 支持3G等数据链路下载方式.</div>
<div>&nbsp; &nbsp; 当压缩包下载完成后, EL会自动安装内容包, 并在系统状态栏中有如下通知信息.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_15.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 由于EL下载使用的是系统提供的标准下载组件(标准到, 都可以在系统自带的下载管理应用中看到EL的下载内容), 因此在下载过程中, 不影响EL的使用, 也可被关闭. 当EL再次启动时, 会自动检查下载状态, 以确认是需要导入已经下载的内容包, 还是需要重新下载. 由于使用了标准下载组件, 有时点击'submit'后, 似乎EL没有反应, 请再多等下, 状态栏上的下载通知就会显示出来的, 点多了啊, 那就会有多个下载了...<br />
&nbsp; &nbsp; 另外, 由于数据存放的服务器都是第三方的空间, 一个是国内的, 一个是国外的, 下载质量和速度没法控制, 甚至一次的连接数我都不控制不了, 所以这里先说抱歉了...(求包养, 求空间...)<br />
<br />
9. 版本升级<br />
&nbsp; &nbsp; EL升级只需下载新的apk包, 然后安装即可, 原有已下载安装的内容包不会丢失的; 因为和ESL课程相关的内容都存放在SD卡上.&nbsp;<br />
<br />
10. 检查内容包更新<br />
&nbsp; &nbsp; 这个是EL 1.3.0中添加的功能, 如下图所示.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_31.png" border="0" alt="" width="240" height="400" /><br />
<br />
<span style="font-size: 14px; line-height: 21px;">&nbsp; &nbsp; 点击'Check for new packages'按钮, EL将取回EL内容包的更新列表,&nbsp;</span>更新列表含有三列内容: 内容包的序号, 更新时间和ESL课程.<br />
<br />
<a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html">Release 1.5.0 更新</a>:<br />
<br />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">1. 自动下载/安装新版本</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 这个功能应该在EL第一版的时候就该支持, EL没有放到任何的'应用商店'中, 这意味着不会自动通知和下载, 每次更新都要用户下载apk包, 然后再安装, 这真是罪过啊...对不起啊, 我也是才想起来, 所以赶紧就加上了.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 如下图所示, 当点击'Check for new packages' 按钮时, 如果EL发现有新版本了, 就会自动提示是否下载安装. 在确认下载安装后, EL会开始下载新版本, 并在下载完成时自动安装.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_49.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_50.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_51.png" border="0" alt="" width="240" height="400" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 下载提示只会每次检查新包时会提示一次, 但在About界面中总会显示最新版本的(Latest Version is xxx). 另外, EL的数据是放置在sdcard上的, 只要不删除数据文件, 更新EL并不会丢失原来的数据.</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 这里需要说明下, 根据Android的安全机制, 并不能保证下载后的EL安装包能够安装成功, 可能由于权限, 或者签名等等问题导致无法安装或者安装失败. 当失败时, 因为EL安装包已经下载好了, 只需要打开sdcard下的</span><strong style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">/jie/el/cache/el.apk</strong><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">文件手工安装下皆可, 不需要再下载和拷贝安装EL安装包了. (想来像我这样直接全手工制作和安装Android ROM的应该不多吧? 这样做的好处就是 -- 想干嘛就干嘛...)</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 2. 通知栏中控制播放</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 当EL播放时候被切换到后台时会有通知显示在通知栏中, 如下图所示. 现在可以直接通过这个通知来控制后台的播放, 而不再需要打开EL了, 方便不?&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_52.png" border="0" alt="" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" /><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 点击通知中的图标,可以进行相应的操作 -- 前一个, 播放/暂停, 下一个和关闭.&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 由于Android 2.3.x不支持这个功能, 所以2.3.x版本上的EL的播放通知还是原来的样子, 只能直接点击切换到EL, 而不能像现在这样直接控制播放.&nbsp;</span><br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<br style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;" />
<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13.333333969116211px; line-height: 20px; background-color: #ffffff;">&nbsp; &nbsp; 另外, 现在只有EL在播放是被切换到后台时, 才在通知栏中显示通知. 不再像前面的版本每次播放都现在通知了. (省的每次切换是都显示下通知, 好闪啊...)</span><br />
<br />
<a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html">Release 1.6.0 更新</a><br />
<p>&nbsp;&nbsp;&nbsp; 1. EL的Widget</p>
<p><img title="el_54" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_54" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_54_3.png" width="240" height="400" /><img title="el_55" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_55" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_55_3.png" width="240" height="400" /><img title="el_56" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="el_56" src="http://www.cppblog.com/images/cppblog_com/codejie/Windows-Live-Writer/EL--1.6.0-Release_13849/el_56_3.png" width="240" height="400" /></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 上图所示, EL新增的Widget跟其播放界面中的操作栏完全一致, 功能也一样, 包括播放的快速定位选择. (这个酷不? 我还没见过哪个app像EL这样无聊到在Widget上添加个'菜单', 嘿嘿~) 点击Widget中的EL图标, 可以快速打开EL应用.<br /><br /><br /></p>
&nbsp; &nbsp;有任何问题请跟帖或者直接邮件来...最后,求关注, 求扩散.. enjoy it !</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div><img src ="http://www.cppblog.com/codejie/aggbug/202526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-24 22:24 <a href="http://www.cppblog.com/codejie/archive/2013/08/24/202526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.2 Release</title><link>http://www.cppblog.com/codejie/archive/2013/08/24/202720.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sat, 24 Aug 2013 14:23:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/24/202720.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202720.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/24/202720.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202720.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202720.html</trackback:ping><description><![CDATA[<strong>快捷方式</strong><br /><ul><li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li>
     <li>点击这里<a href="http://item.taobao.com/item.htm?id=19680021933">关注EL内容包</a></li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202525.html">查看EL闲扯贴</a>, <a href="http://www.cppblog.com/codejie/archive/2013/08/18/202625.html">1.1 alpha说明</a><br />
     </li>
</ul>
<br />
<strong>1.2 Release&nbsp;</strong><br />
&nbsp; &nbsp; 加班加点, EL 1.2也敲完了, 这次直接release了, 这样我就不会一直敲啊敲了, 稳定一段时间再说了. 因为还有件重要的事情一直没有时间做 -- EL的内容包..&nbsp;<br />
<br />
&nbsp; &nbsp; EL 1.2包括了如下的更新:<br />
&nbsp; &nbsp; 1. 更改应用配色;<br />
&nbsp; &nbsp; 2. 增加词典功能;<br />
&nbsp; &nbsp; 3. 增加三个配置项;<br />
&nbsp; &nbsp; 4.&nbsp;增加两种下载code支持;<br />
&nbsp; &nbsp; 5. 修正N多Bugs.<br />
<br />
&nbsp; &nbsp; EL 1.2计划是增加自定义高亮颜色的, 但想来还是词典功能比较实用, 才决定先增加词典了的, 同时修改了1.1 alpha测试出的各自bugs. (其它bug需要大家来发现了..), OK,现在EL是1.2 Release了!<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_27.png" border="0" alt="" /><br />
<br />
<br />
&nbsp; &nbsp; 1. 更改应用配色<br />
&nbsp; &nbsp; 朋友说, EL配色太'阴暗'了; 我说, 要有'亮' -- 实际就是改动下Theme了...<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_19.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_2.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 2. 增加词典功能<br />
&nbsp; &nbsp; 这个才是1.2的主要更新呢. 词典功能很有用, 至少我是这样认为的.<br />
&nbsp; &nbsp; 如前面图示, 在应用的标题栏上有个新的'放大镜'图标, 在除播放界面外的其它界面中点击此图标, 即可进入词典界面; 在播放界面中点击图标不会直接进入到词典界面, 需要点击输入键盘中的'查询'按钮才能进入. 为了可能会改成直接在播放界面中显示查询结果. <br />
&nbsp; &nbsp; 词典界面如下图所示. 此时输入字母, EL将实时显示查询到的单词, 默认一次显示20个. 如果还有更多单词需要显示, 只需向上拖单词列表, EL会自动加载剩余符合条件的单词, 直至显示全部单词. 说明下, 部分设备, 尤其是一些Android平板, 一次肯定不止能显示20个,但不用担心, 只要拖动一次后, EL会自动判断出一次最多能加载多少个单词的.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_20.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_21.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; 点击列表中的单词, 将弹出如下解释窗口. 窗口跟内容播放界面中使用的是相同的窗口, 因此点击窗口中的单词, 是同样可以使用TTS发音的.&nbsp;<br />
&nbsp; &nbsp; 弹出窗口的外形做了修改, 不在是圆角方框, 而是充满屏幕宽度的方形框. 这样弹出窗口看起来比较'平', 这概念现在比较'流行'不是?<br />
<br />
&nbsp; &nbsp; 3.&nbsp;增加三个配置项<br />
&nbsp; &nbsp; 如下图所示,&nbsp;<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_22.png" border="0" alt="" width="240" height="400" /><br />
<br />
<br />
&nbsp; &nbsp; Don't Automatically Play : 不自动播放; 选中此项后, 点击内容列表中的课程, 进入播放界面中后, 不再自动播放了;<br />
&nbsp; &nbsp; Automatically Hide Tile : 如下面两个图片对比, 选中此项, 播放界面中的Title部分将在1.5秒后自动隐藏,以增大内容显示面积;<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_23.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_24.png" border="0" alt="" width="240" height="400" /><br />
<br />
&nbsp; &nbsp; Don't Load Extension Words : 在词典界面中查询时, 有些单词是其它单词的'Extension'形式, 比如Searches是Search的'Extension'. 当选中此项时, Searches将不会被查询出来.<br />
<img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_26.png" border="0" alt="" width="240" height="400" /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_25.png" border="0" alt="" width="240" height="400" /><br />
<br />
<br />
&nbsp; &nbsp; 4.&nbsp;增加两种下载code支持<br />
&nbsp; &nbsp; 这个需要来自Tempo的建议 -- 他希望下载的request code能够由'0000-0-00-00'格式转变成全数字格式, 这样在输入是就无需切换输入软键盘了. 我接收了此建议, 支持了全数字格式, 并支持了一直特殊的'直接'下载模式, 以备不时之需啊. 当然, 我不得不说, 很多输入法中, 数字和'-'号都在同一键盘中的. 但让人换个输入法, 总是那么不'体贴用户'不是? 嘿嘿..<br />
<br />
&nbsp; &nbsp; 最后, 为了庆祝EL Release, 附送一个EL的内容包, 此包包含了ESL的111到115课的内容和mp3数据. 赶紧下载哦, 这个包是Taobao上卖的哦, 当然也是目前唯一的一个包..<br />
<br />
&nbsp; &nbsp; Request code: 900001300013<br />
&nbsp; &nbsp; &nbsp; &nbsp;Check code: 0000<br /><br />&nbsp; &nbsp; 或者<br />&nbsp; &nbsp; Request code: 0001-3-00-00<br />&nbsp; &nbsp; &nbsp; &nbsp;Check code: 0-00-00<br /><img src ="http://www.cppblog.com/codejie/aggbug/202720.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-24 22:23 <a href="http://www.cppblog.com/codejie/archive/2013/08/24/202720.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : Saving Battery</title><link>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Wed, 21 Aug 2013 16:28:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202692.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/22/202692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202692.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202692.html</trackback:ping><description><![CDATA[<br />
&nbsp; &nbsp; 下班路上用EL听ESL, 没到家电池就没了...<br />
&nbsp; &nbsp; 下了车, 边走边算计着 -- 应该是高亮全开看小说(现在换成&lt;冰与火之歌&gt;了..)导致没电的, 但为啥以前不用EL时, 听个ESL不会没电呢...会不会EL比较耗电?<br />
<br />
&nbsp; &nbsp; 晚上火力全开, 反省代码 -- 一个异步线程, 用于通知UI更新播放轨迹的, 后台播放时也在不停的running... <br />
&nbsp; &nbsp; 这个线程本身就是sleep()个几百毫秒, 然后通知UI更新下音频播放的位置. 虽没有数据表明这样的'轻'线程会消耗多大电量, 但本着有CPU跳动, 就会有电量消耗的原则, 改了...<br />
<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp; &nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;TickCounterTask&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;AsyncTask&lt;Void,&nbsp;Void,&nbsp;Void&gt;&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">protected</span>&nbsp;Void&nbsp;doInBackground(Void<img src="http://www.cppblog.com/Images/dot.gif" alt="" />&nbsp;arg0)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(isAudioPlaying&nbsp;&amp;&amp;&nbsp;listener&nbsp;!=&nbsp;<span style="color: #0000FF; ">null</span>)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.onPlaying(player.getCurrentPosition());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread.sleep(777);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(InterruptedException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(DeadObjectException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(RemoteException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #0000FF; ">null</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</div><br />&nbsp; &nbsp; 加了listener != null的条件, 这样当UI被切换到后台是, 取消listener, 异步线程即被终止. 嘿嘿, 省了...<br /><br />&nbsp; &nbsp; 终端设备上的app不比PC机的, 除了要考虑UI, Screen Size等问题外, 电量消耗也是必须的啊, 总不能让人为了一个app, 随身背上个三块电板不是? 再说, CPU占多了, 真的很'烫'手啊...<img src ="http://www.cppblog.com/codejie/aggbug/202692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-22 00:28 <a href="http://www.cppblog.com/codejie/archive/2013/08/22/202692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : getPrev() and getNext()</title><link>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Tue, 20 Aug 2013 15:35:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202681.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/20/202681.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202681.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202681.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 早上一朋友问, EL如果支持删除某个课程, 还怎么能支持getPrev()和getNext()? 我很奇怪, 为啥不能呢? 他说, 因为EL的课程号是不连续的, 那么应该是靠连续的记录ID继续上下索引的, 那么当删除某个记录时, 导致ID不连续, 也就不能正常Navigate了, 是不? 除非删除后, 一个一个'搬', 以包装连续.&nbsp;听他说完, 忽然感到轻松 -- 原来'笨蛋'不止我一个啊...<br />&nbsp; &nbsp; 在实现EL对记录的getPrev()和getNext()时, 我也为EL的记录表中没有一个连续的记录ID而郁闷 -- 没有个连续ID, 而课程号本身又不连续, 咋不呢? 那时都还没考虑删除的问题呢. 郁闷地去睡觉, 半夜惊醒才想起, 没有连续记录ID就是设计是觉得这个ID跟课程号在一起太冗余才去掉的, 而getPrev()/getNext(), 完全靠课程号就能搞定的啊, 代码敲的都忘记自己的初衷了, SQL语句也白学了...<br /><br />&nbsp; &nbsp; 于是我把下面ELContentProvider的片段发给他, 并加了句 -- '你咋跟我一样笨呢...'<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->&nbsp; &nbsp; @Override<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Cursor&nbsp;query(Uri&nbsp;uri,&nbsp;String[]&nbsp;projection,&nbsp;String&nbsp;selection,&nbsp;String[]&nbsp;selectionArgs,&nbsp;String&nbsp;sortOrder)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;res&nbsp;=&nbsp;matcher.match(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;table&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">switch</span>&nbsp;(res)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_RANDOM:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;elDBAccess.getReadableDatabase();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table&nbsp;=&nbsp;"esl";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"random()&nbsp;limit&nbsp;1";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_NEXT:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_PREV:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_FIRST:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">case</span>&nbsp;MATCH_ITEM_EL_ESL_LAST:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_NEXT)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx&gt;"&nbsp;+&nbsp;ContentUris.parseId(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;asc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_PREV)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;"idx&lt;"&nbsp;+&nbsp;ContentUris.parseId(uri);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;desc";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(res&nbsp;==&nbsp;MATCH_ITEM_EL_ESL_FIRST)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;asc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;selection&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sortOrder&nbsp;=&nbsp;"idx&nbsp;desc";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;=&nbsp;elDBAccess.getReadableDatabase();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;db.query("esl",&nbsp;projection,&nbsp;selection,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;<span style="color: #0000FF; ">null</span>,&nbsp;sortOrder,&nbsp;"1");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />&nbsp;&nbsp;&nbsp;&nbsp;}</div>&nbsp; &nbsp;&nbsp;<br />&nbsp; &nbsp;记录在此, 提醒自己保持清醒...<img src ="http://www.cppblog.com/codejie/aggbug/202681.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-20 23:35 <a href="http://www.cppblog.com/codejie/archive/2013/08/20/202681.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : 1.1 alpha</title><link>http://www.cppblog.com/codejie/archive/2013/08/18/202625.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Sun, 18 Aug 2013 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/18/202625.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202625.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/18/202625.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202625.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202625.html</trackback:ping><description><![CDATA[<strong><br />
快捷方式</strong><br /><ul><li>点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载EL安装包</a>&nbsp;</li><li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/15/202526.html">翻阅使用手册</a></li>
     <li>点击这里关注EL内容包</li>
     <li>点击这里<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202525.html">查看EL闲扯贴</a>.<br /><br /></li>
</ul>
&nbsp; &nbsp; 周末EL新增/更新了如下功能:<br />&nbsp; &nbsp; 1. 标记前次播放的课程;<br />&nbsp; &nbsp; 2. 快速跳转到课程指定部分;<br />&nbsp; &nbsp; 3. 清除下载记录;<br /><br />1.&nbsp;标记前次播放的课程<br />&nbsp; &nbsp; 如下图所示, EL会在课程列表中前次播放的课程项目的右上角打上个'播放'的标记; 请看图例中的' ESL Podcast 20' 项.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_16.png" border="0" alt="" width="240" height="400" /><br /><br />2.&nbsp;快速跳转到课程指定部分<br />&nbsp; &nbsp; 如使用文档中说明的, ESL的课程一般分为三个部分: Slow Dialog/Explanations/Fast Dialog. 分别是慢速阅读, 内容解释和快速阅读. 这个版本中, EL可以快速跳转到三个部分, 以方便使用.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_17.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; 点击最左侧按钮, 选择相应的项目即可快速跳转. 如果当前课程不支持跳转, 那么此按钮或者某个菜单项将不可操作. (一般ESL早期的课程只有前两部分).<br /><br />3.&nbsp;清除下载记录<br />&nbsp; &nbsp; EL的内容包可以直接下载, 当下载过程中出错时, EL会在下次启动时, 再次尝试下载. 经常出错的原因除了无线网络不稳定外, 另外一个原因是目前存放内容包的服务器也不稳定. EL在设计时就是考虑到这中情况, 会尝试不断下载, 直至下载成功. 这样好的一个想法和机制, 在实际使用中却碰到个问题 -- 无限次数尝试. EL一启动, 如果发现有内容需要下载, 那就开始下载, 甚至同一个下载内容会同时多个下载出现(呃, 这个是bug..). 所以, EL这次提供个功能, 用户可以清除所有下载项目. 当需要下载时, 再次输入request code就好了.<br /><img src="http://www.cppblog.com/images/cppblog_com/codejie/el/el_18.png" border="0" alt="" width="240" height="400" /><br /><br />&nbsp; &nbsp; 这次修改涉及到了数据库的修改, 但升级时, 不用卸载前一个版本, 直接下载安装就好了, EL会自己搞定这些的.<br /><br /><br /><br />&lt;---- 关于上传失败 ----&gt;<br />&nbsp; &nbsp;这两天做了两个测试用的内容包, 一个35+MB, 一个40+MB, 上传时, 无数次的失败啊...想来今年'狠心'把宽带升级到4MB了, 怎么还是慢到失败呢? 后来发现了 -- 要可靠上传, 同样要'翻x墙'啊....(你要问为啥中间有个x? 谁知道呢, 说我翻x墙是太敏感, 不让发..ri了..)<img src ="http://www.cppblog.com/codejie/aggbug/202625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-18 20:43 <a href="http://www.cppblog.com/codejie/archive/2013/08/18/202625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EL : It is alpha!</title><link>http://www.cppblog.com/codejie/archive/2013/08/15/202525.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Thu, 15 Aug 2013 13:20:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2013/08/15/202525.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/202525.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2013/08/15/202525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/202525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/202525.html</trackback:ping><description><![CDATA[<br />&nbsp; &nbsp; 经过40多个夜晚的连续敲啊敲,EL(正式名称为ESL with LAC)终于敲到alpha版了, 也意味着终于可以见人了~~<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">点击这里下载体验</a>!<br /><br />&nbsp; &nbsp; EL (ESL with LAC)到底是啥呢? <br /><br />&nbsp; &nbsp; 先闲扯下为啥会敲这个应用 -- 那是一个平常的下班时刻,公交车上的我听着ESL,看着手机中的&lt;蜀山剑侠传&gt;, 忽然耳机中传来一段话(忘记那句了..)打断了我,心中就是知道那句话到底是什么,来回重复听了N遍,就是想不起其中某个单词怎么写和其意思. 这么一急,就有了现在的EL的构想 -- 为何不把ESL和LAC的词典合并在一起放到android中呢? 于是本着<strong>应用因实用而生</strong> (LingosHook也是这样来的) 的原则, 兴奋地提前一站下车,开始在脑中画起EL的框架图来...<br /><br />&nbsp; &nbsp; EL就是<a href="http://www.eslpod.com">ESL(www.eslpod.com)</a>和<a href="http://www.cppblog.com/codejie/archive/2012/08/30/164888.html">LAC (LingosHook Android Client)</a>的结合 -- ESL,想来跟我一样'<strong>一直</strong>努力'学E文的同学应该比较了解的,ESL是比较注重听说和实用的E文教程,几乎每天都有更新,伴随着mp3和script,每篇会着重讲解一些单词或语句的意思和用法; LAC嘛,本来是尝试将Lingoshook移植Android平台上的应用,后来却偏向词典了...将两者结合 -- 前者提供mp3和script,后者提供其中重要单词的解释说明的即时查询.<br /><br />&nbsp; &nbsp; 想想简单,敲起来就是痛苦了, 但现在,最痛苦的初始阶段过去了, 请同我一起享受这alpha版发布的愉快时刻吧!<br /><br />&nbsp; &nbsp; 点击这里<a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html">下载安装</a> -- EL应用的<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202526.html">使用说明文档</a>.<br /><br />&nbsp; &nbsp; 这里多说下 -- EL应用目前是个人发布, 提供有限下载, 因为计划收益将来自其所需的内容包,所以不会包含任何广告信息 (想来也没人喜欢学E文时看广告吧). 现在还没有时间开始制作内容包, 并且也没有找好服务器存放这些内容包, 所以可以提供下载的内容包一段时间内怕还是很有限的. 唉,有时也会想想, 最好有人直接把EL包养去,这样内容包的制作和存储/下载问题就解决了..<br />&nbsp; &nbsp; 关于EL应用安全问题, 只能说我敲的代码中不会有任何的'不安全'指令,应用所需'网络访问权限',仅用于下载内容包, 并使用的是android提供的标准下载组件.<br /><br />&nbsp; &nbsp; 另, 求有贤(闲)者愿意帮忙测试下EL嘛? 可以通过邮件或者跟帖反馈问题, 当然最好能直接到<a href="http://code.google.com/p/esl-lac/issues/list">esl-lac上提交issue report</a>, 这样便于跟踪. 先谢谢了...<br /><br />&nbsp; &nbsp; alpha版本后, 希望可以把问题都暴露出来, 后面如果没啥大问题, 那就直接release了, 中间不再添加新的功能, 多数时间放在内容包的制作上, 毕竟EL只是个壳, 真正有用的还是内容啊..不过, 目前我还是有计划添加如下功能的.&nbsp;<br /><br />&nbsp; &nbsp; <strike>1. 记录前次播放位置 (1.1)</strike><br />&nbsp; &nbsp; 2. 记录播放历史 (2.0)<br />&nbsp; &nbsp; <strike>3. 快速跳转到课程某些标记位置 (1.1)</strike><br />&nbsp; &nbsp; 4. 删除指定课程 (2.0)<br />&nbsp; &nbsp; <strike>5. 查询输入的单词, 词典功能 (2.0)</strike><br />&nbsp; &nbsp; 6. 自定义高亮单词 (2.1)<br />&nbsp; &nbsp; 7. 查询选中单词 (2.2)<br />&nbsp; &nbsp; <strike>8. 生词管理/辅助记忆 (2.0) (这个是LAC的功能啊...)</strike><br />&nbsp; &nbsp; 9. 自定义高亮颜色 (1.5)<br />&nbsp; &nbsp; 10. 自定义课程 (3.0)<br />&nbsp; &nbsp; 11. 导入LingosHook数据 (3.0)<br /><br />&nbsp; &nbsp; 如何? 你还有啥需求不?<br /><br />&nbsp; &nbsp;&nbsp;括号中的数字标识的是功能可能出现的版本, 现在是1.0了...当然就上面这些, 如果真的都能搞定, 怕都要两年后的事情了吧, 嘿嘿...<img src ="http://www.cppblog.com/codejie/aggbug/202525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2013-08-15 21:20 <a href="http://www.cppblog.com/codejie/archive/2013/08/15/202525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LingosHook：Lingoes生词本下载页</title><link>http://www.cppblog.com/codejie/archive/2010/07/23/108996.html</link><dc:creator>codejie</dc:creator><author>codejie</author><pubDate>Fri, 23 Jul 2010 08:56:00 GMT</pubDate><guid>http://www.cppblog.com/codejie/archive/2010/07/23/108996.html</guid><wfw:comment>http://www.cppblog.com/codejie/comments/108996.html</wfw:comment><comments>http://www.cppblog.com/codejie/archive/2010/07/23/108996.html#Feedback</comments><slash:comments>187</slash:comments><wfw:commentRss>http://www.cppblog.com/codejie/comments/commentRss/108996.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/codejie/services/trackbacks/108996.html</trackback:ping><description><![CDATA[<br />
<br />
<a></a>
<table border="1" cellspacing="2" cellpadding="2">
     <tbody>
         <tr>
             <td>应用</td>
             <td>版本</td>
             <td>上传时间</td>
             <td>下载地址</td>
             <td>更新记录</td>
             <td>注释说明</td>
         </tr>
        <tr>
             <td>New I;P</td>
             <td>preview v3</td>
             <td>2014.04.06</td>
             <td><a href="https://play.google.com/store/apps/details?id=jie.android.ip.preview">google play install</a><a href="https://play.google.com/store/apps/details?id=jie.android.ip"><br />
             </a><br />
             apk download<br />
             </td>
             <td>
             <div>1<span style="font-size: 10pt; line-height: 21px;">. add achievement and leaderboard</span></div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/04/07/206489.html">更新说明</a>
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v12.0</td>
             <td>2014.04.01</td>
             <td><a href="https://play.google.com/store/apps/details?id=jie.android.ip">google play install<br />
             </a><br />
             apk download<br />
             </td>
             <td>
             <div>1<span style="font-size: 10pt; line-height: 21px;">. add new four stages&nbsp;</span><span style="font-size: 13px; line-height: 21px;">from Leo&nbsp;</span><span style="font-size: 10pt; line-height: 21px;">into Unsolved pack;</span></div>
             </td>
             <td><br />
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v11.0</td>
             <td>2014.03.30</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td>
             <div><span style="font-size: 10pt; line-height: 21px;">1. support to break execution anytime;&nbsp;</span></div>
             <div><span style="font-size: 10pt;">2. add new four stages into Unsolved pack;</span></div>
             </td>
             <td><br />
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v10.0</td>
             <td>2014.03.28</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td>
             <div><span style="font-size: 10pt; line-height: 21px;">1. support to execute Step by Step;</span></div>
             <div><span style="font-size: 10pt;">2. add new three stages into Unsolved pack;</span><br />
             <span style="font-size: 10pt;">
             3. add a new tutorial stage;</span></div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/03/28/206388.html">更新说明</a>
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v9.0</td>
             <td>2014.03.25</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td>
             <div><span style="font-size: 10pt; line-height: 21px;">1. support shot Menu screen;</span></div>
             <div><span style="font-size: 10pt;">2. add new 2 stages into Easy pack;</span></div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/03/25/206333.html">更新说明</a>
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v7.0</td>
             <td>2014.03.21</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td><span style="font-size: 10pt;">1. adjust stages;</span><br />
             <span style="font-size: 10pt;">
             2. fixed some bugs;</span><br />
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/03/22/206272.html">更新说明</a>
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v6.0</td>
             <td>2014.03.17</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td><span style="font-size: 10pt;">1. Move all unsolved stages to 'Unsolved' pack, please feedback your solution!</span><br />
             </td>
             <td><br />
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v4.0</td>
             <td>2014.03.14</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td><span style="font-size: 10pt;">1. fixed some bugs</span><br />
             </td>
             <td><br />
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v3.0</td>
             <td>2014.03.13</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td><span style="font-size: 10pt;">1. fixed some bugs</span><br />
             <span style="font-size: 10pt;">
             2. show source in target window while done</span></td>
             <td><br />
             </td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview v2.0</td>
             <td>2014.03.12</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td><span style="font-size: 10pt;">增加高亮支持</span></td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/03/12/206135.html">在线文档</a></td>
         </tr>
         <tr>
             <td>I;P (I'm a Programmer)</td>
             <td>preview</td>
             <td>2014.03.07</td>
             <td>google play install<br />
             <br />
             apk download<br />
             </td>
             <td></td>
             <td><a href="http://www.cppblog.com/codejie/archive/2014/03/07/206085.html">在线文档</a></td>
         </tr>
         <tr>
             <td></td>
             <td></td>
             <td></td>
             <td></td>
             <td></td>
             <td></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL within LAC)</td>
             <td>&nbsp;1.6.1</td>
             <td>&nbsp;2013.11.10</td>
             <td><a href="https://play.google.com/store/apps/details?id=jie.android.el">google play install</a><br />
             <br />
             <a href="http://lingoshook.googlecode.com/files/EL_1.6.1.apk">EL_1.6.1.apk</a></td>
             <td>
             <div>1. 支持'中文';<br />
             2. 登录Google Play;</div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/11/10/204190.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;LingosHook -WordExport</td>
             <td>&nbsp;1.1.1</td>
             <td>&nbsp;2013.10.29</td>
             <td><a href="http://lingoshook.googlecode.com/files/P_WordExport_1.1.1.zip">WordExport.zip</a></td>
             <td>
             <div>1. 支持部分自定义输出格式</div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/10/30/203982.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.6.0</td>
             <td>&nbsp;2013.10.22</td>
             <td>&nbsp;<a href="http://lingoshook.googlecode.com/files/EL_1.6.0.apk">EL_1.6.0.apk</a></td>
             <td>
             <div>1. 新增EL的Widget;</div>
             <div>2. 修正包下载bugs;</div>
             <div>3. 重新设计播放接口;</div>
             <div>4. 重写UI切换代码;</div>
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/10/21/203861.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.5.0</td>
             <td>&nbsp;2013.10.09</td>
             <td>&nbsp;<a http:=""  code.google.="" com="" p="" lingoshook="" downloads=""  list"="">EL_1.5.0.apk</a></td>
             <td>1. 自动下载/安装新版本;<br />
             2. 通知栏中控制播放;
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/10/09/203623.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.4.0</td>
             <td>&nbsp;2013.09.28</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.4.0.apk</a></td>
             <td>1. 新增背诵(Reciting)功能;<br />
             2. 新增生词本(Vocab)功能;
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/09/27/203461.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.3.0</td>
             <td>&nbsp;2013.09.07</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.3.0.apk</a></td>
             <td>1. 新增'check for new packages';<br />
             2. 修正切换ESL播放异常;<br />
             3. 修正2.3.x下的下载兼容问题;
             </td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/09/07/203062.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.2.2</td>
             <td>&nbsp;2013.09.02</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.2.2.apk</a></td>
             <td>1. 修正2.3.x平台兼容问题</td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/09/02/202969.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.2.1</td>
             <td>&nbsp;2013.08.26</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.2.1.apk</a></td>
             <td>1. 修正播放状态栏提示Bug</td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/08/26/202782.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.2</td>
             <td>&nbsp;2013.08.24</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.2.apk</a></td>
             <td>1. 新增词典功能</td>
             <td><a href="http://www.cppblog.com/codejie/archive/2013/08/24/202720.html">更新说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.1alpha</td>
             <td>&nbsp;2013.08.15</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL_1.1.apk</a></td>
             <td>1. 标记前次播放的课程;<br />
             2. 快速跳转到课程指定部分;<br />
             3. 清除下载记录;<br />
             </td>
             <td>&nbsp;<a href="http://www.cppblog.com/codejie/archive/2013/08/18/202625.html">EL使用说明</a></td>
         </tr>
         <tr>
             <td>&nbsp;EL (ESL with LAC)</td>
             <td>&nbsp;1.0 alpha</td>
             <td>&nbsp;2013.08.15</td>
             <td>&nbsp;<a href="http://code.google.com/p/lingoshook/downloads/list">EL.apk</a></td>
             <td>&nbsp;<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202525.html">alaph版本说明</a></td>
             <td>&nbsp;<a href="http://www.cppblog.com/codejie/archive/2013/08/13/202526.html">EL使用说明</a></td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a> x64</td>
             <td>1.6.700</td>
             <td>2013.04.24</td>
             <td><a href="https://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup_x64-1.6.700.exe">LingosHook-Setup_x64</a></td>
             <td>1.支持x64<br />
             2.不包含任何插件</td>
             <td>看<a href="http://www.cppblog.com/codejie/archive/2013/04/24/199667.html">这里</a></td>
         </tr>
         <tr>
             <td><a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a></td>
             <td>v2</td>
             <td>2013.04.06</td>
             <td><a href="https://lingoshook.googlecode.com/files/DemoDictionaryOfLAC2.apk">DemoDictionayOfLAC2.apk</a></td>
             <td>Native Dictionary Demo</td>
             <td>看<a href="http://www.cppblog.com/codejie/archive/2013/04/06/199142.html">这里</a></td>
         </tr>
         <tr>
             <td><a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a></td>
             <td>v1</td>
             <td>2013.02.13</td>
             <td><a href="https://code.google.com/p/lingoshook/downloads/list">DemoDictionayOfLAC2.apk</a></td>
             <td>Native Dictionary Demo</td>
             <td>看<a href="http://www.cppblog.com/codejie/archive/2013/02/13/197822.html">这里</a></td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a></td>
             <td>1.6.700</td>
             <td>2013.01.07</td>
             <td>
             <p><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup-1.6.700.exe&amp;can=2&amp;q=">LingosHook-Setup</a></p>
             <p><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-mini-Setup-1.6.700.exe&amp;can=2&amp;q=">LingosHook-Mini-Setup</a></p>
             </td>
             <td>
             <p>1.修正Index页面下,使用'copy to tag'菜单时崩溃问题.<br />
             </p>
             </td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2013/01/07/197089.html">这里</a>；</td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a> Plugins - WordExport</td>
             <td>1.0.1</td>
             <td>2012.10.23</td>
             <td><a href="http://code.google.com/p/lingoshook/downloads/detail?name=P_WordExport.zip&amp;can=2&amp;q=">WordExport</a></td>
             <td>1. 支持按照单词字母顺序和添加顺序导出;</td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/10/23/193750.html">这里</a>。</td>
         </tr>
         <tr>
             <td><a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a></td>
             <td>1.1.1</td>
             <td>2012.08.30</td>
             <td><a href="http://lingoshook.googlecode.com/files/LingosHookAndroidClient_P1.apk">LAC</a><br />
             <br />
             <a href="http://lingoshook.googlecode.com/files/LingosHook%20Android%20Client_P2.apk">LAC</a></td>
             <td>1. 修改数据导入时,无Word数据;<br />
             2. 修改数据导入时,无Word数据显示;</td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/08/30/188681.html">这里</a>。</td>
         </tr>
         <tr>
             <td><a title="LAC" href="www.cppblog.com/codejie">LingosHook Android Client</a></td>
             <td>1.1.0</td>
             <td>2012.08.28</td>
             <td><br />
             </td>
             <td>1. 支持XML格式导入;<br />
             2. 支持单个数据导入;<br />
             3. 支持远程(HTTP)方式导入;<br />
             4. 增加'Html界面点击'配置.</td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/08/28/188560.html">这里</a>。</td>
         </tr>
         <tr>
             <td>&nbsp;LAC</td>
             <td>&nbsp;1.0.0</td>
             <td>&nbsp;2012.08.02</td>
             <td><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHookAndroidClient_D-1.0.0.apk&amp;can=2&amp;q=">LAC</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook%20Android%20Client-1.0.0.apk&amp;can=2&amp;q=">LAC</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=c4.db3&amp;can=2&amp;q=">CET-4</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=c6.db3&amp;can=2&amp;q=">CET-6</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=c46.db3&amp;can=2&amp;q=">CET-4&amp;6</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=LH_Export.db3&amp;can=2&amp;q=">MyDB</a></td>
             <td>1. Beta后第一版；<br />
             2. 提供四个实例数据库；<br />
             </td>
             <td>1. 更新说明看这<a href="http://www.cppblog.com/codejie/archive/2012/08/02/186053.html">里</a>；<br />
             2.<a href="http://www.cppblog.com/codejie/archive/2012/08/02/164888.html"> LAC帮助文档</a>在这里！<br />
             </td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a></td>
             <td>1.6.618</td>
             <td>2012.06.18</td>
             <td><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup-1.6.618.exe&amp;can=2&amp;q=">LingosHook-Setup</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-mini-Setup-1.6.618.exe&amp;can=2&amp;q=">LingosHook-Mini-Setup</a></td>
             <td>1. 支持删除&#8216;无匹配数据&#8217;单词</td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/06/18/179305.html">这里</a>。</td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a></td>
             <td>&nbsp;1.6.061</td>
             <td>&nbsp;2012.06.01</td>
             <td><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup-1.6.061.exe&amp;can=2&amp;q=">LingosHook-Setup</a><br />
             <a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-mini-Setup-1.6.061.exe&amp;can=2&amp;q=">LingosHook-Mini-Setup</a></td>
             <td>
             <p>1. 支持将Tag下所有单词移动到另外Tag下；<br />
             2. 支持HTML数据优化；<br />
             3. 更新WordExport插件；</p>
             4. 修正&#8216;数据添加Bug'，并新增DataCleanup插件；<br />
             5. ForDonator插件更新；<br />
             </td>
             <td>1. 更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/06/01/177047.html">这里</a>；<br />
             2. 小宝六一快乐！</td>
         </tr>
         <tr>
             <td><a title="LingosHook" href="www.cppblog.com/codejie">LingosHook</a></td>
             <td>1.5222</td>
             <td>2012.02.23</td>
             <td>
             <p><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup-1.5.222.exe&amp;can=2&amp;q=">LingosHook-Setup</a></p>
             <p><a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-mini-Setup-1.5.222.exe&amp;can=2&amp;q=">LingosHook-Mini-Setup</a></p>
             </td>
             <td>
             <p>1. 支持一定范围内的单词批量删除；<br />
             2. 支持Tag的更名；<br />
             3. 添加LingosHook主页的显示和设置；<br />
             4. 修改插件接口；<br />
             5. 修正'天天背单词'中快捷键无法使用小键盘的问题；<br />
             6. 更新版本为1.5.xxx；</p>
             </td>
             <td>更新说明看<a href="http://www.cppblog.com/codejie/archive/2012/02/22/166260.html">这里</a>；</td>
         </tr>
     </tbody>
</table>
<br />
[这里是<a href="http://www.cppblog.com/codejie/archive/2010/04/08/112016.html">Q&amp;A链接</a>,刚从页面最后行拷贝上来的..有问题请查看先,没有的请来<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#99;&#111;&#100;&#101;&#106;&#105;&#101;&#64;&#103;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">mail</a>,辛苦各位了~]<br />
<br />
升级说明：<br />
&nbsp;&nbsp;&nbsp; 1. <span style="color: #ff0000">不建议</span>删除原来的LingosHook，直接安装覆盖就好；<br />
<br />
插件安装说明：<br />
&nbsp;&nbsp;&nbsp; 1. 直接将插件放到LingosHook应用目录下的plugins子目录中即可；<br />
&nbsp;&nbsp;&nbsp; 2. 各位Donator，ForDonator插件当前是兼容的，有任何问题，请直接M我。<br />
<br />
<br />
&lt;---- 下面是原来的更新记录（是不是上面的更好点啊） ----&gt;<br />
<p><br />
&nbsp;&nbsp;&nbsp; LingosHook上传没有30分钟，就发现两个Bugs，那想来后面可能的更新会更多，为了防止到处修改下载地址，统一放在这里，这样改一次就好了，嘿嘿～～<br />
<br />
&nbsp;&nbsp;&nbsp; LingosHook当前版本点击<a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-Setup-1.4.061.exe&amp;can=2&amp;q=">这里下载</a>，最小安装包（不包含VC Redistributable）<a href="http://code.google.com/p/lingoshook/downloads/detail?name=LingosHook-mini-Setup-1.4.061.exe&amp;can=2&amp;q=">这里下载</a>。（请安装前杀毒，安全第一～）</p>
&nbsp;&nbsp; &nbsp; &nbsp;
<table style="padding-bottom: 2px; margin-top: 2px; margin-right: 2px; margin-bottom: 2px; margin-left: 2px; padding-left: 2px; padding-right: 2px; border-collapse: collapse; padding-top: 2px; " border="1" cellspacing="2" cellpadding="3">
     <tbody>
         <tr>
             <td>版本</td>
             <td>上传时间</td>
             <td>修改记录</td>
             <td>注释说明</td>
         </tr>
         <tr>
             <td>0.5.100</td>
             <td>2010.03.05</td>
             <td>
             <p>1.TinyHtmlParser对象内存泄露错误</p>
             <p>2.Unhook操作异常</p>
             </td>
             <td>界面说明在<a href="http://www.cppblog.com/codejie/archive/2010/03/05/108812.html">这里</a></td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.5.700.7z">0.5.700</a></td>
             <td>2010.03.10</td>
             <td>
             <p>1.增加自动Hook功能</p>
             </td>
             <td>界面说明在<a href="http://www.cppblog.com/codejie/archive/2010/03/10/109394.html">这里</a></td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.7.100.7z">0.7.100</a></td>
             <td>2010.03.25</td>
             <td>
             <p>1.增加Tag功能</p>
             </td>
             <td>
             <p>1.Tag的使用说明<a href="http://www.cppblog.com/codejie/archive/2010/03/25/110490.html">这里</a><br />
             2.版本更新说明<a href="http://www.cppblog.com/codejie/archive/2010/03/24/110484.html">这里</a><br />
             3.由于数据库表发生了变化，<span style="color: red">安装前请一定要手工删除原有的数据库文件<br />
             </span>(文件名称为lingosHook.db3，缺省安装目录为C:\Program Files\Jie\LingosHook)</p>
             </td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.8.000.7z">0.8.000</a></td>
             <td>2010.04.01</td>
             <td>
             <p>1.增加Memory Daily功能</p>
             </td>
             <td>
             <p>1.可以背单词了～ <br />
             2.版本更新说明以及Memory Daily功能使用说明<a href="http://www.cppblog.com/codejie/archive/2010/04/01/111306.html">这里</a></p>
             </td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.8.200.7z">0.8.200</a></td>
             <td>2010.04.08</td>
             <td>1.修改TinyHtmlParser对象，以提高识别能力</td>
             <td>改动说明在<a href="http://www.cppblog.com/codejie/archive/2010/04/08/112011.html">这里</a></td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.9.000.7z">0.9.000</a></td>
             <td>2010.04.14</td>
             <td>
             <p>1.支持<a href="http://www.lingoes.cn/zh/dictionary/dict_down.php?id=7AB175CC5F622A44A0DECE976AF22A16">朗道英汉词典</a>（Langdao EC&nbsp;Dictionary）</p>
             <p>2.增加生词右键ContextMenu管理菜单</p>
             </td>
             <td>
             <p>1. 终于可以说支持多词典了（虽然就两个，Vicon和Langdao）；</p>
             <p>2.版本更新及使用说明在<a href="http://www.cppblog.com/codejie/archive/2010/04/14/112572.html">这里</a>；</p>
             </td>
         </tr>
         <tr>
             <td>0.9.200</td>
             <td>2010.04.15</td>
             <td>1. 支持HTML强制截取功能；</td>
             <td>1. 版本更新及使用说明在<a href="http://www.cppblog.com/codejie/archive/2010/04/16/112738.html">这里</a>；</td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-0.9.640.7z">0.9.640</a></td>
             <td>2010.04.20</td>
             <td>
             <p>1. 支持语音了；</p>
             <p>2. 支持模糊窗口句柄定位了；</p>
             </td>
             <td>1. 版本更新及使用说明在<a href="http://www.cppblog.com/codejie/archive/2010/04/19/113029.html">这里</a>；</td>
         </tr>
         <tr>
             <td><a href="http://cid-68438b1b5aa55663.skydrive.live.com/self.aspx/LingosHook/LingosHook-Setup-1.0.000.7z">1.0.000</a></td>
             <td>2010.04.29</td>
             <td>
             <p>1. 增加'Memory Daily'快捷操作方式；</p>
             <p>2. 支持自动语音；</p>
             <p>3. <span style="color: #ff0000">Open Source！</span></p>
             </td>
             <td>
             <p>1. 版本更新及其使用说明在<a href="http://www.cppblog.com/codejie/archive/2010/04/29/113961.html">这里</a>；</p>
             <p>2. Open Source信息看<a href="http://www.cppblog.com/codejie/archive/2010/04/29/113969.html">这里</a>；</p>
             </td>
         </tr>
         <tr>
             <td><a href="http://lingoshook.googlecode.com/files/LingosHook-Setup-1.0.001.7z">1.0.001</a></td>
             <td>2010.05.04</td>
             <td>
             <p>1. 增加更多的Memory Daily快捷操作方式；</p>
             <p>2. 修正了FilterShow对象的bugs。</p>
             </td>
             <td>
             <p>1. 版本更新说明在<a href="http://www.cppblog.com/codejie/archive/2010/05/05/114396.html">这里</a>；<br />
             2.. 可以在Googlecode.com上下载了,<a href="http://lingoshook.googlecode.com/files/LingosHook-Setup-1.0.001.7z">这里</a>；</p>
             </td>
         </tr>
         <tr>
             <td><a href="http://lingoshook.googlecode.com/files/LingosHook-Setup-1.0.002.7z">1.0.002</a></td>
             <td>2010.05.05</td>
             <td>1. 修正HTML解析对象bug</td>
             <td>1. 随笔在<a href="http://www.cppblog.com/codejie/archive/2010/05/05/114521.html">这里</a>；</td>
         </tr>
         <tr>
             <td><a href="http://lingoshook.googlecode.com/files/LingosHook-Setup1.0.003a.7z">1.0.003a</a></td>
             <td>2010.05.14</td>
             <td>1. 引入Tidy，用于预处理HTML数据；</td>
             <td>1. 版本说明在<a href="http://www.cppblog.com/codejie/archive/2010/05/14/115322.html">这里</a>；</td>
         </tr>
         <tr>
             <td><a href="htt &lt;br id="  -moz-br-"=""></a></td>
         </tr>
     </tbody>
</table><img src ="http://www.cppblog.com/codejie/aggbug/108996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/codejie/" target="_blank">codejie</a> 2010-07-23 16:56 <a href="http://www.cppblog.com/codejie/archive/2010/07/23/108996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>