<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_SkyD - 斯克迪亚（徐明璐）个人博客</title><subtitle type="text">追求创新与人性化，期望人们身边的一切都趋于完美</subtitle><id>http://feed.cnblogs.com/blog/u/40142/rss</id><updated>2012-05-05T05:34:30Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/40142/rss"/><entry><id>http://www.cnblogs.com/SkyD/archive/2012/04/19/2457237.html</id><title type="text">libgdx的tmx地图处理工具gdx-tiled-preprocessor.jar（TiledMapPacker）修正版</title><summary type="text">最近想做个Android的游戏，用到libgdx，现在研究地图这块，制作好地图tmx文件后需要处理后libgdx才能载入，需要用到TiledMapPacker工具，该工具被放在gdx-tiled-pr...</summary><published>2012-04-19T07:54:00Z</published><updated>2012-04-19T07:54:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2012/04/19/2457237.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2012/04/19/2457237.html"/><content type="html">&lt;p&gt;最近想做个Android的游戏，用到libgdx，现在研究地图这块，制作好地图tmx文件后需要处理后libgdx才能载入，需要用到TiledMapPacker工具，该工具被放在gdx-tiled-preprocessor.jar里，这破玩意可愁死我了，一路尝试下来各种各种报错神马的诸如：&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Failed to load Main-Class manifest attribute&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Exception in thread &amp;quot;main&amp;quot; com.badlogic.gdx.utils.GdxRuntimeException: Creating window failed    &lt;br /&gt;at com.badlogic.gdx.backends.jogl.JoglApplication.&amp;lt;init&amp;gt;(JoglApplication.java:86)     &lt;br /&gt;at com.badlogic.gdx.tiledmappacker.TiledMapPacker.main(TiledMapPacker.java:329)     &lt;br /&gt;at com.skyd.tiledmappacker.TiledMapPackerTool.main(TiledMapPackerTool.java:15)     &lt;br /&gt;Caused by: java.lang.reflect.InvocationTargetException     &lt;br /&gt;at java.awt.EventQueue.invokeAndWait(Unknown Source)     &lt;br /&gt;at javax.swing.SwingUtilities.invokeAndWait(Unknown Source)     &lt;br /&gt;at com.badlogic.gdx.backends.jogl.JoglApplication.&amp;lt;init&amp;gt;(JoglApplication.java:80)     &lt;br /&gt;... 2 more     &lt;br /&gt;Caused by: java.lang.UnsatisfiedLinkError: no gdx64 in java.library.path     &lt;br /&gt;at java.lang.ClassLoader.loadLibrary(Unknown Source)     &lt;br /&gt;at java.lang.Runtime.loadLibrary0(Unknown Source)     &lt;br /&gt;at java.lang.System.loadLibrary(Unknown Source)     &lt;br /&gt;at com.badlogic.gdx.utils.GdxNativesLoader.load(GdxNativesLoader.java:118)     &lt;br /&gt;at com.badlogic.gdx.backends.jogl.JoglNativesLoader.load(JoglNativesLoader.java:29)     &lt;br /&gt;at com.badlogic.gdx.backends.jogl.JoglApplication.initialize(JoglApplication.java:111)     &lt;br /&gt;at com.badlogic.gdx.backends.jogl.JoglApplication$1.run(JoglApplication.java:82)     &lt;br /&gt;at java.awt.event.InvocationEvent.dispatch(Unknown Source)     &lt;br /&gt;at java.awt.EventQueue.dispatchEventImpl(Unknown Source)     &lt;br /&gt;at java.awt.EventQueue.access$000(Unknown Source)     &lt;br /&gt;at java.awt.EventQueue$1.run(Unknown Source)     &lt;br /&gt;at java.awt.EventQueue$1.run(Unknown Source)     &lt;br /&gt;at java.security.AccessController.doPrivileged(Native Method)     &lt;br /&gt;at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)     &lt;br /&gt;at java.awt.EventQueue.dispatchEvent(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.pumpEvents(Unknown Source)     &lt;br /&gt;at java.awt.EventDispatchThread.run(Unknown Source)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Exception in thread &amp;quot;main&amp;quot; java.lang.NullPointerException    &lt;br /&gt;at com.badlogic.gdx.tiledmappacker.TiledMapPacker.processMap(TiledMapPac     &lt;br /&gt;ker.java:92)     &lt;br /&gt;at com.skyd.tiledmappacker.Main.main(Main.java:38)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;到最后看网上别人也无解，说这玩意全是错误，都是用单独的图块文件通过TexturePacker拼起来后得到整图及packfile文件，然后再拿进地图编辑器编辑以输出tmx文件，感觉切成小图再重新拼合挺麻烦的，就尝试修正这个工具：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553375957.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553392218.png" width="246" height="567" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;我新建了这个项目，引入了相关的jar和gdx-tiled-preprocessor.jar的源码，在新建的Main类中的主函数里仿照原先TiledMapPacker类的主函数的调用方式调用TiledMapPacker类的功能，但是去掉了新建窗口的那部分代码：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553418338.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553435155.png" width="575" height="632" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;我真不知道这操蛋的窗口建起来是搞毛用的，里面屁也不执行，还是死活都会报错，娘的，这是Main类的代码：&lt;/p&gt;  &lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;package&lt;/span&gt; com.skyd.tiledmappacker;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.File;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; java.io.IOException;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.badlogic.gdx.tiledmappacker.TiledMapPacker;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;import&lt;/span&gt; com.badlogic.gdx.tools.imagepacker.TexturePacker.Settings;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Main {&lt;br/&gt;&lt;span style="color: #008000"&gt;/**&lt;br/&gt; * @param args&lt;br/&gt; */&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; main(String[] args) {&lt;br/&gt;File tmxFile, inputDir, outputDir;&lt;br/&gt;Settings settings = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Settings();&lt;br/&gt;&lt;span style="color: #008000"&gt;// Note: the settings below are now default...&lt;/span&gt;&lt;br/&gt;settings.padding = 2;&lt;br/&gt;settings.duplicatePadding = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;TiledMapPacker packer = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TiledMapPacker();&lt;br/&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (args.length != 2) {&lt;br/&gt;System.out.println(&amp;quot;&lt;span style="color: #8b0000"&gt;Usage: INPUTDIR OUTPUTDIR&lt;/span&gt;&amp;quot;);&lt;br/&gt;System.exit(0);&lt;br/&gt;}&lt;br/&gt;inputDir = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(args[0]);&lt;br/&gt;outputDir = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; File(args[1]);&lt;br/&gt;&lt;br/&gt;System.out.println(&amp;quot;&lt;span style="color: #8b0000"&gt;待处理目录：&lt;/span&gt;&amp;quot;+inputDir+&amp;quot;&lt;span style="color: #8b0000"&gt; &lt;/span&gt;&amp;quot;+inputDir.getAbsolutePath());&lt;br/&gt;System.out.println(&amp;quot;&lt;span style="color: #8b0000"&gt;待处理目录：&lt;/span&gt;&amp;quot;+outputDir+&amp;quot;&lt;span style="color: #8b0000"&gt; &lt;/span&gt;&amp;quot;+outputDir.getAbsolutePath());&lt;br/&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!inputDir.exists()) {&lt;br/&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RuntimeException(&amp;quot;&lt;span style="color: #8b0000"&gt;Input directory does not exist&lt;/span&gt;&amp;quot;);&lt;br/&gt;}&lt;br/&gt;&lt;span style="color: #0000ff"&gt;try&lt;/span&gt; {&lt;br/&gt;packer.processMap(inputDir, outputDir, settings);&lt;br/&gt;} &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt; (IOException e) {&lt;br/&gt;&lt;span style="color: #0000ff"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; RuntimeException(&amp;quot;&lt;span style="color: #8b0000"&gt;Error processing map: &lt;/span&gt;&amp;quot; + e.getMessage());&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;/pre&gt;&lt;p&gt;修好了窗口问题，执行起来还是有BUG，执行到TiledMapPacker类的processMap方法里就会报错，要修改其源码，将其中创建FileHandle的方式全部由“Gdx.files.absolute(XXX.getAbsolutePath())”改为“new FileHandle(XXX.getAbsolutePath())”形式，改好后的代码：&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;pre style="background-color: #ffffff; margin: 0em; width: 100%; font-family: consolas,&amp;#39;Courier New&amp;#39;,courier,monospace; font-size: 12px"&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; processMap (File inputDir, File outputDir, Settings settings) &lt;span style="color: #0000ff"&gt;throws&lt;/span&gt; IOException {&lt;br/&gt;FileHandle inputDirHandle = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileHandle(inputDir.getAbsolutePath());&lt;br/&gt;File[] files = inputDir.listFiles(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; TmxFilter());&lt;br/&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (File file : files) {&lt;br/&gt;System.out.println(&amp;quot;&lt;span style="color: #8b0000"&gt;待处理文件：&lt;/span&gt;&amp;quot;+file+&amp;quot;&lt;span style="color: #8b0000"&gt; &lt;/span&gt;&amp;quot;+file.getAbsolutePath());&lt;br/&gt;map = TiledLoader.createMap(&lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileHandle(file.getAbsolutePath()));&lt;br/&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt; (TileSet set : map.tileSets) {&lt;br/&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (!processedTileSets.contains(set.imageName)) {&lt;br/&gt;processedTileSets.add(set.imageName);&lt;br/&gt;packTileSet(set, inputDirHandle, outputDir, settings);&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;writeUpdatedTMX(outputDir, map.tmxFile);&lt;br/&gt;}&lt;br/&gt;}&lt;/pre&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;然后导出为Runnable JAR file：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553451275.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1f2bb657" border="0" alt="SNAGHTML1f2bb657" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553478475.png" width="629" height="554" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553506231.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1f2cbb27" border="0" alt="SNAGHTML1f2cbb27" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553537641.png" width="629" height="554" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;注意入口选择Main类。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;修正好之后的测试环境：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553569366.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191553581234.png" width="518" height="265" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;在in目录里放置素材图片和地图编辑器生成的tmx文件：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191554007811.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/20120419155401484.png" width="446" height="140" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;命令行执行：&lt;/p&gt;&lt;p&gt;D:\test&amp;gt;java -jar TiledMapPacker.jar in out&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191554075190.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML1f30d2bc" border="0" alt="SNAGHTML1f30d2bc" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191554109457.png" width="625" height="895" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;out目录将得到处理后的文件：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191554115129.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204191554152526.png" width="766" height="170" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;至此就搞定了，可以在libgdx里进行渲染了。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/20120419155416989.png" width="89" height="98" /&gt;&lt;/p&gt;&lt;p&gt;修正后的TiledMapPacker.jar下载：&lt;a title="http://vdisk.weibo.com/s/4jXW0" href="http://vdisk.weibo.com/s/4jXW0" target="_blank"&gt;http://vdisk.weibo.com/s/4jXW0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;参考文档：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/htynkn/archive/2012/01/12/libgdx_12.html" target="_blank"&gt;http://www.cnblogs.com/htynkn/archive/2012/01/12/libgdx_12.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.csdn.net/cng1991/article/details/7288234" target="_blank"&gt;http://blog.csdn.net/cng1991/article/details/7288234&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="https://code.google.com/p/libgdx/wiki/TiledMaps" target="_blank"&gt;https://code.google.com/p/libgdx/wiki/TiledMaps&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/" target="_blank"&gt;http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2457237.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/04/19/2457237.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2012/04/10/2440432.html</id><title type="text">我也来谈谈时间管理方式及工具</title><summary type="text">前面这位朋友谈了一下他的时间管理方式：http://www.cnblogs.com/liushuijinger/archive/2012/04/10/2439862.html他利用常见的日历功能来规划时间：我回应说：“对我来说通常这样的计划都会被琐事和拖延心理粉碎~”，一下引起了多位朋友的赞同，看来这个问题很普遍，我觉得确实很少有人能够坚持按照既定计划准时完成所有事。造成计划失败的主要元凶其实就是如我所说的“琐事”和“拖延心里”，那么针对这两项我分别使用两种工具来对应...</summary><published>2012-04-10T05:32:00Z</published><updated>2012-04-10T05:32:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2012/04/10/2440432.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2012/04/10/2440432.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330457708.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 22px 22px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" align="right" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330473573.png" width="175" height="175" /&gt;&lt;/a&gt;前面这位朋友谈了一下他的时间管理方式：&lt;a title="http://www.cnblogs.com/liushuijinger/archive/2012/04/10/2439862.html" href="http://www.cnblogs.com/liushuijinger/archive/2012/04/10/2439862.html" target="_blank"&gt;http://www.cnblogs.com/liushuijinger/archive/2012/04/10/2439862.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;他利用常见的日历功能来规划时间：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330521159.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330533502.png" width="237" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;我回应说：&amp;#8220;对我来说通常这样的计划都会被琐事和拖延心理粉碎~&amp;#8221;，一下引起了多位朋友的赞同，看来这个问题很普遍，我觉得确实很少有人能够坚持按照既定计划准时完成所有事。&lt;/p&gt;  &lt;p&gt;造成计划失败的主要元凶其实就是如我所说的&amp;#8220;琐事&amp;#8221;和&amp;#8220;拖延心里&amp;#8221;，那么针对这两项我分别使用两种工具来对应。&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;OmniFocus&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;它号称GTD类App的王牌，确实不是浪得虚名，它的基本理念非常好：&lt;/p&gt;  &lt;p align="center"&gt;&lt;u&gt;&lt;strong&gt;任务通常是需要在一个时间段内完成的，而不是在确切时间开始并执行完。&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p align="left"&gt;俗话说计划赶不上变化，琐事总是会打破计划的，而计划被频繁打破之后你自己也没信心继续维持计划了，那么对于现在的人来说必须正视干扰的存在和难以抵抗性，不要期待完全按照计划时间执行某一任务。&lt;/p&gt;  &lt;p align="left"&gt;围绕这一理念，OmniFocus将任务设计了一个开始时间和截止时间。在开始时间之前你是不会在任务列表中看到它的，那时你只要专心完成当前任务；到了开始时间之后，你检视任务时就能看到了；在接近截止日期时会提醒你一下。&lt;/p&gt;  &lt;p align="left"&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330565124.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 4" border="0" alt="Picture 4" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101330594336.jpg" width="729" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="left"&gt;另外它强调的是你自主地周期性检视任务，而不是它天天催着你要做什么，在任务开始时都不会特别提醒你要做什么，你只有在检视时才能发现新的任务，这样你只有在主动想做些什么的时候才会去找任务做，不会有被动的反感。（这感觉就像魔兽世界里清任务，有成就感；而日历提醒方式就好像有个婆娘天天唠叨着你要做啥啥&amp;#8230;还要做啥啥&amp;#8230;）&lt;/p&gt;  &lt;p align="left"&gt;既然检视是主要行为，OmniFocus就针对检视做出了一系列的强大功能，使得任务分拣归类功能变得异常强大，而且并不繁琐：&lt;/p&gt;  &lt;p align="left"&gt;首先是基于项目分类的检视，这个很好理解，就是你正在执行的有名目的项目，如开发项目、学习项目等等，以分门别类的检视和集中完成。&lt;/p&gt;  &lt;p align="left"&gt;项目的特点是可以规划任务的顺序逻辑，如顺序执行和平行执行及独立动作。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331021531.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 9" border="0" alt="Picture 9" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331047396.jpg" width="729" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;第二个是基于上下文的分类检视，上下文的概念是模糊的，其意义差不多就是一个关键点，即完成任务的关键因素。&lt;/p&gt;  &lt;p&gt;比如&amp;#8220;申请经费&amp;#8221;和&amp;#8220;请假&amp;#8221;这两个任务的关键都是老总点头，那么老总就可以被设为上下文，而&amp;#8220;送修设备&amp;#8221;任务是要到技术部那里，那么技术部就是上下文，&amp;#8220;给女友重装电脑&amp;#8221;任务只能在女友家里执行，那么女友家就可以设为上下文，&amp;#8220;取钱&amp;#8221;的上下文就是银行喽。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331085015.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 1 (1)" border="0" alt="Picture 1 (1)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331113572.jpg" width="729" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;上下文的意义也是便于集中处理相关事务，这在地点上尤为适用，因此上下文附加了地理位置分配功能。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331149720.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 3 (1)" border="0" alt="Picture 3 (1)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331157570.jpg" width="729" height="547" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;该功能最精妙的是这个搜索功能，它允许你不指定精确位置，而是始终在你周边搜索，你可以输入银行或电信运营商的名称，或者输入&amp;#8220;超市&amp;#8221;、&amp;#8220;复印&amp;#8221;、&amp;#8220;礼品&amp;#8221;这样的关键词，这样你总能通过地图模式找到最近的可供完成任务的地点。&lt;/p&gt;  &lt;p&gt;这是在地图视图检视任务的画面，这也是第三种检视方式，基于地理位置的检视，它依赖于上下文提供的地理位置，这个视图会给你外出办事带来极大的效率提升：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331201219.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 8" border="0" alt="Picture 8" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331232873.jpg" width="729" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;第四个是基于时间的任务检视，称为预测视图，它能检查未来几天内将要截止的任务，并且也能显示系统日历所包含的一些事件供参考。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331269446.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 2 (1)" border="0" alt="Picture 2 (1)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331291690.jpg" width="729" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;基于这四种卓越的任务检视方式，你处理任务的效率会极大提升，并且会乐于主动完成既定项目。&lt;/p&gt;  &lt;p&gt;注：OmniFocus目前支持iOS和Mac平台，可以以多种方式同步数据，最简单的是注册一个官方账户与官方服务器自动同步。另外该软件价格较高，iPad版要200多人民币，iPhone版也要100多，Mac版近500元~，这个我是直接用盗版了，iOS上可以选用Awsome Note（乐顺备忘录）或2 Do替代，但功能有差距。&lt;/p&gt;  &lt;p&gt;iPad版下载地址：&lt;a href="http://itunes.apple.com/us/app/omnifocus-for-ipad/id383804552?mt=8" target="_blank"&gt;http://itunes.apple.com/us/app/omnifocus-for-ipad/id383804552?mt=8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;iPhone版下载地址：&lt;a title="http://itunes.apple.com/us/app/omnifocus-for-iphone/id284885288?mt=8" href="http://itunes.apple.com/us/app/omnifocus-for-iphone/id284885288?mt=8" target="_blank"&gt;http://itunes.apple.com/us/app/omnifocus-for-iphone/id284885288?mt=8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Mac版下载地址：&lt;a href="http://itunes.apple.com/us/app/omnifocus/id402835630?mt=12" target="_blank"&gt;http://itunes.apple.com/us/app/omnifocus/id402835630?mt=12&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;Pomodoro Task Manager (Pomio)&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;这个工具是番茄工作法任务管理器，选择这个工具主要靠这篇文章启示：&lt;a href="http://www.cnblogs.com/1-2-3/archive/2012/01/18/intro-pomodoro.html" target="_blank"&gt;http://www.cnblogs.com/1-2-3/archive/2012/01/18/intro-pomodoro.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;番茄工作法是专门针对拖延症问题的，它的核心理念是要求你保持25分钟的精神集中，这称为一个番茄时间，在此期间你不能做任何与任务无关的事，即便你在等待编译或是苦思无解，就算傻坐着看屏幕也不能打开微博、看看邮箱、回复QQ，一切等到25分钟番茄时间过去之后再做处理。（建议到上面的文章里阅读完整的番茄工作法规则）&lt;/p&gt;  &lt;p&gt;这样在番茄时间内你就基本处于与世隔绝状态，不会被外界干扰分心，更不会主动分心做别的事。&lt;/p&gt;  &lt;p&gt;这样你只要在该工作的时候第一时间打开番茄计时器，然后就立刻会被消逝的时间警醒而专注工作。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331327771.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 5" border="0" alt="Picture 5" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331344749.jpg" width="412" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;其实番茄工作法的实施只需要一个简单的计时器就可以，而Pomodoro Task Manager有别于普通的计时器软件之处是它提供了额外的项目分类和工作量统计功能。你可以针对不同项目发起番茄时间，并在之后看到每个项目所花费的番茄时间，继而了解自己完成某一种项目大概所需的工时。在统计视图中你可以看到近60天的工作量统计图，以番茄时间为单位：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331362326.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 6" border="0" alt="Picture 6" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331383731.jpg" width="412" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;另外你也可以根据自己的情况自由调整番茄时间和间歇休息时间，不过并不建议这么做，番茄工作法的作息规划配比已经被大量实践验证过的，可以说恰到好处。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331413990.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Picture 7" border="0" alt="Picture 7" src="http://images.cnblogs.com/cnblogs_com/SkyD/201204/201204101331436823.jpg" width="412" height="548" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;使用Pomodoro Task Manager就好像找到了一个监工，督促你专心完成既定的任务。&lt;/p&gt;  &lt;p&gt;记住，一旦计时开始，你就进入了结界，而避免拖延症干扰任务的最佳方式就是尽早打开计时器。&lt;/p&gt;  &lt;p&gt;注：Pomodoro Task Manager 目前仅支持iOS，但同类App在Android等移动设备上都有，如果没有的话找个倒计时App替代，或者干脆买个厨房用的番茄计时器摆在桌上。&lt;/p&gt;  &lt;p&gt;iOS通用版下载地址：&lt;a href="http://itunes.apple.com/us/app/pomodoro-task-manager-pomio/id483241074?mt=8" target="_blank"&gt;http://itunes.apple.com/us/app/pomodoro-task-manager-pomio/id483241074?mt=8&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;结语&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;有这两个神器在手，长时间线上的宏观规划和短时间线上的即时实施都将被很好的管理起来，&amp;#8220;琐事&amp;#8221;和&amp;#8220;拖延心理&amp;#8221;将不再是问题。&lt;/p&gt;  &lt;p&gt;另外传统的日历日程工具也并非完全无用了，实际上OmniFocus并不适合去规划必须遵从准确时间进行的任务，比如朋友的生日、公司会议、考试等，而这些恰恰是日历工具的本职。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2440432.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/04/10/2440432.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2012/02/02/2335261.html</id><title type="text">iPad最值得期待的切实改进构想</title><summary type="text">屏幕分辨率提高 它用起来就像一本杂志，它看起来也当如此。 这是在iPad2发布前就被民众广为呼唤的改进，当下种种迹象表明高清屏幕已经不远了，很可能就在iPad3上实现。 偏振光或裸眼3D显示器及双...</summary><published>2012-02-01T16:55:00Z</published><updated>2012-02-01T16:55:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2012/02/02/2335261.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2012/02/02/2335261.html"/><content type="html">&lt;p&gt;&lt;strong&gt;屏幕分辨率提高&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053215807.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053228414.png" width="233" height="301"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;它用起来就像一本杂志，它看起来也当如此。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;这是在iPad2发布前就被民众广为呼唤的改进，当下种种迹象表明高清屏幕已经不远了，很可能就在iPad3上实现。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;偏振光或裸眼3D显示器及双镜头&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053249692.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053263794.png" width="226" height="192"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;想象一下在iPad上体验立体照片、视频、电影、杂志、教科书、游戏、地图导航、视频通话会是多么激动人心吧。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;LG的裸眼3D手机和偏振光3D显示器已经很贴近市场了，销售成绩也不差。 &lt;p&gt;在iPad提升分辨率的前提下，提升而来的分辨率刚好足以弥补3D显示时的精度损失，所以届时实现3D显示将是非常值得考虑的并行方案。 &lt;p&gt;当下3D市场时机可说是只欠东风，苹果如果能真正引领起全民3D革命的话，必将赚得盆满钵溢。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;摄像头像素提升&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053313516.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053338764.png" width="262" height="256"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;既然自iPad2开始配备了摄像头，就别让它沦为鸡肋，或是成为笑柄。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;许多用户表示iPad2的摄像头几乎除了视频通话时间外就荒废不用了，而也有不少人贪恋iPad的高清体验，希望在iPad上将社交及图像后期处理等工作完整实现，因此迫切期待两枚优质的摄像头。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;LED闪光灯&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053353389.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053363488.png" width="208" height="242"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;好马配好鞍，摄像头提升的话就不要再放弃黑夜了。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;似乎绝大多数有摄像头的平板电脑都配备了闪光灯，而iPad2没有。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;广角镜头&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053488713.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053532763.png" width="349" height="251"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;相较iPad2的大屏幕而言，其镜头视野真是出奇的小。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;想用Facetime给你的小组开个会议？那得让组员拥抱在一起才能看全他们。 &lt;p&gt;我们期待能用广角镜头和网络视频连接两个不相邻的房间，让两边的人仿若生活在一起一般，如果iPad不去做这事，那也许XBox和Windows8会乐于凭借Kinect去完成。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;运算性能飙升&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020053596280.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/20120202005402132.png" width="266" height="200"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;这似乎是必行之事，相比CPU和GPU，内存更迫切需要提升，以承载专业级应用。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;随着大量开发商涌入iOS平台，软件质量竞争愈发激烈，专业级大厂商进入iPad角逐是大势所趋，诸如图像处理、绘画、三维、影音编辑等应用目前已都有试水，但几乎都受制于内存限制无法大展拳脚。 &lt;p&gt;如果苹果不尽快解开限制，也许会很快失去既得的市场成长机遇。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;蓝牙4.0或NFC&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054097337.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054139685.png" width="312" height="224"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;这个必须有，没有就OUT了。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;新一代的通讯协议，理当支持起来，比较可能的情况是像iPhone4S一样仅支持蓝牙4.0。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;防水涂层&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054211590.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054259511.png" width="352" height="226"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;泡澡时玩玩爱洗澡的小鳄鱼如何？&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;得益于外壳结构简约、一体成型特性，当下iPad的防溅射效果还凑合，但如能将iPad带入更严苛的环境，无疑是令人欢欣的。 &lt;p&gt;从展会上看来，防水涂层技术现在已经发展得不错了。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;振动器&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054382044.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054423869.png" width="346" height="202"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;提供多一种回馈体验方式总是好事，会使游戏体验更加逼真。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;手机和游戏机标配的功能，平板实现并无坏处，在iPad设计之初未纳入振动器的原因可能是因为平板面积大，提供均衡震感的话得使用多个振动器，使得内部设计难度增大，故而暂弃。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;指纹识别器&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054518206.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054548155.png" width="244" height="207"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;指纹解锁、指纹登录AppStore、遗失后远程指纹锁定、指纹访问授权、指纹登录网站、指纹登录第三方应用…&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;有了指纹识别功能，商务人士会爱死iPad的，即便普通人也会为其便捷性而大声喝采。 &lt;p&gt;指纹识别器早已是高端VAIO或ThinkPad笔记本的标配，ThinkPad平板及摩托罗拉Android手机上也已配备，iPad配备上必会迎得企业市场青睐。 &lt;p&gt;&amp;nbsp; &lt;p&gt;&lt;strong&gt;大猩猩玻璃加碳纤维外壳&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020054589980.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201202/201202020055007736.png" width="411" height="258"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;纯爷们型刚毅组合，让贴膜和保护壳见鬼去吧。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;i设备似乎都那么脆弱，以致使保护壳、贴膜厂家大发横财，如果苹果能使用强化的材质，用户就不用那么小心了，但显然这会重创其合作厂商利益，可苹果确也没少干过这类事嘛。 &lt;p&gt;康宁大猩猩玻璃已在Android及WindowsPhone7手机上大量采用，市场验证效果良好。 &lt;p&gt;而碳纤维很早就被索尼用在VAIO高端笔记本外壳上了，这使得索尼高端笔记本拥有出众的轻便性和抗磨损、抗变形能力，苹果碍于成本一直没舍得用，可当下iPad又迫切需要这种近乎完美的轻便而强韧的材料，不知苹果会如何抉择。            &lt;img src="http://www.cnblogs.com/SkyD/aggbug/2335261.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/02/02/2335261.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2012/01/03/2310796.html</id><title type="text">RegeX 3 正则表达式实践教程之 &amp;mdash;&amp;mdash; 在Eclipse中以装饰器模式包装接口</title><summary type="text">在实现一个庞杂的接口时，往往需要付出很多体力劳动，例如这个： 以上是要实现的接口的一小部分方法，我们要实现此接口以包装其衍生类，由于仅仅是包装，只需要把所有方法都转交给被包装对象“getSource...</summary><published>2012-01-03T00:32:00Z</published><updated>2012-01-03T00:32:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2012/01/03/2310796.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2012/01/03/2310796.html"/><content type="html">&lt;p&gt;在实现一个庞杂的接口时，往往需要付出很多体力劳动，例如这个：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120103083121522.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120103083122390.png" width="659" height="853"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;以上是要实现的接口的一小部分方法，我们要实现此接口以包装其衍生类，由于仅仅是包装，只需要把所有方法都转交给被包装对象“getSource()”来执行。&lt;/p&gt; &lt;p&gt;好在有正则表达式这种东西存在，能够减轻部分工作。&lt;/p&gt; &lt;p&gt;但是，通常很难用普通正则表达式替换工具完整地完成这样的任务，我们需要移除注释部分文字、获取方法签名、转交“getSource()”执行，还要把参数完整传递过去，使用单一正则表达式几乎不可能完成该任务。&lt;/p&gt; &lt;p&gt;这时来看看&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html" target="_blank"&gt;RegeX 3&lt;/a&gt;如何解决此问题吧：&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font color="#000000"&gt;&lt;font style="font-weight: bold"&gt;第一步 去除注释&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;输入表达式：\s*//.+&lt;/p&gt; &lt;p&gt;替换字符为空&lt;/p&gt; &lt;p&gt;执行替换&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831244063.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831272894.png" width="726" height="527"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;由左侧可以看到匹配到105条注释。&lt;/p&gt; &lt;p&gt;替换结果可以看到注释都被去除：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831281748.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831285270.png" width="554" height="280"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;第二步 匹配整个方法体&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;左侧选中OutputText节点。&lt;/p&gt; &lt;p&gt;表达式：public (\S+) (?&amp;lt;FuncName&amp;gt;\w+)\((?&amp;lt;Parameters&amp;gt;[\s\S]*?)\)\s*{\s*\n\s*(?&amp;lt;Return&amp;gt;return)?[^}]+&lt;/p&gt; &lt;p&gt;此时暂不输入替代文本&lt;/p&gt; &lt;p&gt;执行替换&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831319466.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831334741.png" width="664" height="483"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;第三步 去除参数表中的类型声明字符&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;左侧选中${Parameters}节点&lt;/p&gt; &lt;p&gt;通过集合记录导航条查看匹配到的各项记录&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120103083134182.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831359527.png" width="615" height="297"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;表达式：[\w\&amp;lt;\&amp;gt;\[\]]+\s+(\w+)&lt;/p&gt; &lt;p&gt;替代文本：$1&lt;/p&gt; &lt;p&gt;执行替换&lt;/p&gt; &lt;p&gt;&lt;font color="#000000"&gt;左侧选中&lt;/font&gt;&lt;a href="mailto:$@{Parameters"&gt;$@{Parameters&lt;/a&gt;}节点，再通过集合记录导航条查看替换后的各项记录结果&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120103083138691.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831405410.png" width="721" height="524"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;第四步 去除参数中的换行符&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;有些过长的方法参数书写了多行，去除换行符使生成代码更美观。&lt;/p&gt; &lt;p&gt;表达式：[\r\n]&lt;/p&gt; &lt;p&gt;替代文本为空&lt;/p&gt; &lt;p&gt;执行替换&lt;/p&gt; &lt;p&gt;左侧选中&lt;a href="mailto:$@@{Parameters"&gt;$@@{Parameters&lt;/a&gt;}节点，再通过集合记录导航条查看替换后的各项记录结果&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831436259.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831452407.png" width="714" height="519"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;第五步 完成最后输出&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;左侧点选上面的OutputText&lt;/p&gt; &lt;p&gt;替代文本：&lt;/p&gt; &lt;p&gt;public $1 ${FuncName} (${Parameters}){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${Return} getSource().${FuncName}($@@{Parameters});&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;再次执行替换&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120103083148714.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831518956.png" width="759" height="539"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;左侧点选最下面的OutputText以查看最终结果：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831536282.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831532072.png" width="756" height="350"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;这样就完成了，复制后粘贴回Eclipse吧：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831554905.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201030831571185.png" width="683" height="909"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;结语&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;借助全新的 &lt;a href="http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html" target="_blank"&gt;RegeX 3&lt;/a&gt;，可以把复杂的匹配工作拆解为多个小工序分步执行，再通过创新的$@引用符号功能轻松实现以往需要单独写程序才能完成的工作。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2310796.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/01/03/2310796.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html</id><title type="text">正则表达式替换器 RegeX 3 发布 （Silverlight版）</title><summary type="text">继上一版本RegeX发布以来已有三年多了，此次发布全新设计的RegeX 3供广大开发者使用。新版基于Silverlight开发，支持安装到本地运行，采用类似WindowsPhone7的Metro风格设计。新版本的主打功能有两点：支持无限层级的复杂多重匹配与替换支持在替换时以$@符号引用经过处理后的组内容这两个功能主要为了解决如下问题：冗长的表达式结构。在匹配复杂的格式时，使用的表达式不仅冗长，且晦涩如天书，一旦修改时不小心改变了某个符号后患无穷。无限级多重替换功能将极大改善这一情况，你可以将替换工作拆分成若干个步骤，分别处理，使得思路清晰，表达式易于维护。不可能的任务。正则表达式是万能的，但万这个数字并不大，有很多格式是不可能或很难用一个表达式来完成的，很多时候我们需要自己来写一个新程序予以解决，而当有了$@引用功能，很多问题迎刃而解。$@符</summary><published>2012-01-01T20:28:00Z</published><updated>2012-01-01T20:28:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427464269.png"&gt;&lt;img style="margin: 22px 22px 0px 0px" title="RXICON128" border="0" alt="RXICON128" align="right" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427464236.png" width="128" height="128" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427495334.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427524132.png" width="698" height="525" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;继&lt;a href="http://www.cnblogs.com/SkyD/archive/2008/09/22/1295621.html" target="_blank"&gt;上一版本RegeX&lt;/a&gt;发布以来已有三年多了，此次发布全新设计的RegeX 3供广大开发者使用。&lt;/p&gt;&lt;p&gt;新版基于Silverlight开发，支持安装到本地运行，采用类似WindowsPhone7的Metro风格设计。&lt;/p&gt;&lt;p&gt;新版本的主打功能有两点：&lt;/p&gt;&lt;ul&gt;     &lt;li&gt;支持无限层级的复杂多重匹配与替换&lt;/li&gt;     &lt;li&gt;支持在替换时以$@符号引用经过处理后的组内容&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这两个功能主要为了解决如下问题：&lt;/p&gt;&lt;ol&gt;     &lt;li&gt;冗长的表达式结构。&lt;br /&gt;     在匹配复杂的格式时，使用的表达式不仅冗长，且晦涩如天书，一旦修改时不小心改变了某个符号后患无穷。&lt;br /&gt;     无限级多重替换功能将极大改善这一情况，你可以将替换工作拆分成若干个步骤，分别处理，使得思路清晰，表达式易于维护。&lt;/li&gt;     &lt;li&gt;不可能的任务。&lt;br /&gt;     正则表达式是万能的，但万这个数字并不大，有很多格式是不可能或很难用一个表达式来完成的，很多时候我们需要自己来写一个新程序予以解决，而当有了$@引用功能，很多问题迎刃而解。&lt;br /&gt;     $@符号允许引用目标组的处理结果，比如以前我们在替换时以$1形式引用组1的内容，现在我们可以对$1组再进行正则替换，然后以$@1形式引用其替换结果，这在处理复杂格式时极为有用。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;立即开始使用RegeX3：&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://www.cnblogs.com/SkyD/articles/regex3.html" target="_blank"&gt;&lt;strong&gt;&lt;font size="4"&gt;http://www.cnblogs.com/SkyD/articles/regex3.html&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;提示：程序中单击右键可以安装到桌面，并脱离浏览器运行： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427536018.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427537032.png" width="347" height="193" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427564292.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML74fecf3" border="0" alt="SNAGHTML74fecf3" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427579177.png" width="486" height="222" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;使用入门&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先在源文本框中输入要处理的字符，通常通过剪切板粘贴入：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020427597027.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428007800.png" width="754" height="344" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;然后输入表达式及匹配选项：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428004669.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428015159.png" width="771" height="124" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;再输入替代内容及替代选项：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428019553.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428025584.png" width="767" height="159" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;单击执行替换按钮：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428023599.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428035518.png" width="159" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;此时匹配项和结果都将出现在左栏，展开以查看：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428031897.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428031548.png" width="223" height="146" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;此时在右侧你可以通过集合记录导航功能查看具有多个结果的节点：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428043924.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428053302.png" width="762" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;此时你可以继续对任意节点进行正则替换操作，以达成需求。&lt;/p&gt;&lt;p&gt;全部处理完毕后，点击复制最终输出结果按钮可以复制最下面的OutPutText节点文本到剪切板：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428057172.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428065187.png" width="185" height="56" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;通过导入导出功能可以读取和保存所有数据：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428066550.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428078120.png" width="160" height="60" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428074499.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428076418.png" width="165" height="58" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;特别提示&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428095381.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428105838.png" width="376" height="533" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;这里形如$0或${FuncName}或$@{Parameters}的名称即是在替换时的引用标记，上述三个形式分别代表组、命名组和经过处理的命名组，替换时可以以$形式引用子级节点内容，或以$@形式引用孙级节点内容。 &lt;/p&gt;&lt;p&gt;当前所选节点能够引用的后代节点都使用浅黄色表示。 &lt;/p&gt;&lt;p&gt;后面的[105]表示该组有105个项，可以通过滑动导航条查看每一项： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428118596.png"&gt;&lt;img title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428117691.png" width="761" height="67" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;小技巧&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;点选任意一个&lt;font color="#c0504d"&gt;&lt;strong&gt;$开头的节点&lt;/strong&gt;&lt;/font&gt;后，按&lt;strong&gt;&lt;font color="#c0504d"&gt;Ctrl+C&lt;/font&gt;&lt;/strong&gt;可以直接复制其替换时的引用字符到剪切板： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428114593.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428122052.png" width="347" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;除此之外，还有个更方便的办法，就是直接在$开头的节点上点鼠标&lt;strong&gt;&lt;font color="#c0504d"&gt;右&lt;/font&gt;&lt;font color="#c0504d"&gt;键&lt;/font&gt;&lt;/strong&gt;，即可直接将其引用字符复制到剪切板： &lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/2012010204281234.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/20120102042813524.png" width="353" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;如果引用孙级节点的处理结果还不能满足你的话，你还可以继续对其进行处理，每多一层处理，引用时就多些一个@：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428154263.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201201/201201020428169147.png" width="450" height="702" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这样你的表达式可以像树杈一样不断延展，但始终都不脱离主干。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2309769.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2012/01/02/2309769.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2011/12/31/2309014.html</id><title type="text">Silverlight中后台代码设置TreeView选定项的方法</title><summary type="text">当TreeView在XAML中以嵌套数据模板（HierarchicalDataTemplate）方式绑定数据时，其子元素都是特定类型的对象，而非TreeViewItem，这样就没法通过设置TreeVi...</summary><published>2011-12-31T09:43:00Z</published><updated>2011-12-31T09:43:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2011/12/31/2309014.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2011/12/31/2309014.html"/><content type="html">&lt;p&gt;当TreeView在XAML中以嵌套数据模板（HierarchicalDataTemplate）方式绑定数据时，其子元素都是特定类型的对象，而非TreeViewItem，这样就没法通过设置TreeViewItem子元素的IsSelected属性实现选定效果。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742187230.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742207315.png" width="923" height="171"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;这时可以通过Silverlight Toolkit项目提供的扩展功能实现选取，项目网址：&lt;a href="http://silverlight.codeplex.com/" target="_blank"&gt;http://silverlight.codeplex.com/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;下载并安装后引入System.Windows.Controls.Toolkit.dll：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742223279.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742239592.png" width="286" height="272"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;此时TreeView控件就可以获得如下扩展方法支持：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742315320.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742351303.png" width="1241" height="867"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;只需利用其中的SelectItem()方法，传入目标对象即可实现对其选定。&lt;/p&gt; &lt;p&gt;需注意的是，有时候此方法并不起作用，这可能是因为数据变更后UI布局尚未更新导致的，你可以在SelectItem()方法执行之前执行UpdateLayout()方法强制更新一下即可。&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/20111231174236921.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112311742363679.png" width="276" height="68"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2309014.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/12/31/2309014.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2011/12/27/2303631.html</id><title type="text">Eclipse中Android项目引用其他项目时链接源码的方法</title><summary type="text">参照前一篇文章《Eclipse中Android公共库的正确建立及调用方法》，以前只要在Android库中添加了引用，就能自动在项目中引入源码： 但是更新了新版SDK及ADT插件之后，源码不会被自动引...</summary><published>2011-12-27T07:33:00Z</published><updated>2011-12-27T07:33:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2011/12/27/2303631.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2011/12/27/2303631.html"/><content type="html">&lt;p&gt;参照前一篇文章《&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html"&gt;Eclipse中Android公共库的正确建立及调用方法&lt;/a&gt;》，以前只要在Android库中添加了引用，就能自动在项目中引入源码：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532383306.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532405730.png" width="525" height="222" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;但是更新了新版SDK及ADT插件之后，源码不会被自动引用进来，在当前项目中只能以只读方式访问经编译后的源码：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532438569.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532459639.png" width="281" height="538" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;那么如何手动引入源码呢？&lt;/p&gt; &lt;p&gt;你需要在项目上右键点选属性菜单，然后左栏选择&amp;#8220;Java Build Path&amp;#8221;，在右侧&amp;#8220;Source&amp;#8221;标签中点击&amp;#8220;Link Source&amp;#8230;&amp;#8221;按钮：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532503755.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML3c8397a" border="0" alt="SNAGHTML3c8397a" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271532565222.png" width="752" height="567" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;单击&amp;#8220;Browse&amp;#8230;&amp;#8221;按钮：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533006174.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML3c99c42" border="0" alt="SNAGHTML3c99c42" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/20111227153306738.png" width="545" height="588" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;浏览并选取引用项目的src目录：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533104166.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML3ca8a58" border="0" alt="SNAGHTML3ca8a58" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533113775.png" width="354" height="394" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;确定后修改一下文件夹显示名称：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533128890.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533134006.png" width="519" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;这样源码就被正确链接引用，可以随时跳转后修改了：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533179942.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201112/201112271533199301.png" width="281" height="523" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另需注意的是，这种方法在编译时会引发臭名昭著傻逼至极的&amp;#8220;Conversion to Dalvik format failed with error 1&amp;#8221;错误，无法通过编译，这时只需从项目中删除该链接源码目录，即可通过编译，但你在编译之后还得按上述方法添加回来以方便编码，不得不称赞Android SDK研发小组真乃绝世脑瘫组合，每次升级SDK都会带来大把大把诡异的错误给开发者。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2303631.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/12/27/2303631.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html</id><title type="text">Eclipse中Android公共库的正确建立及调用方法</title><summary type="text">引言 之前一直头痛于没有办法在多个程序中共享资源，用作公共类库的方法也是使用的导出jar再导入的办法，现在终于初步搞明白了，可算解脱了~，分享出来。 建立公共库 首先建立公共库的Android项目，...</summary><published>2011-08-31T20:59:00Z</published><updated>2011-08-31T20:59:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;引言&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;之前一直头痛于没有办法在多个程序中共享资源，用作公共类库的方法也是使用的导出jar再导入的办法，现在终于初步搞明白了，可算解脱了~，分享出来。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;建立公共库&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;首先建立公共库的Android项目，名为MyCoreLib：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458393585.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML664342b" border="0" alt="SNAGHTML664342b" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458426914.png" width="737" height="975" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;完成后在左侧包浏览器里右键点选我们新建的这个项目，选择Properties项：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458439587.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458441638.png" width="395" height="676" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;左侧选择Android分类，右侧勾选Is Library选项：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458475490.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML668b0c9" border="0" alt="SNAGHTML668b0c9" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458502723.png" width="769" height="871" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;完成后在包资源管理器中删除默认生成的资源，以避免以后被引用时冲突：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/20110901045850837.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458513411.png" width="237" height="299" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;打开AndroidManifest.xml，删除下图中红色部分代码：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458526085.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458535071.png" width="698" height="299" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;添加测试用资源&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;至此初始的空库就建立完成了，现在我们来添加一个资源以供其他程序使用，我在这里仅添加了一个名为libName的字符串资源：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458556632.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458563383.png" width="1054" height="695" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;建立测试项目并引入公共库&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;现在新建一个名为LibTest的项目来尝试调用公共库：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458589470.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010458598763.png" width="695" height="845" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;还是右键点选项目，选择Properties：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459019800.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459021851.png" width="395" height="676" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;还是左边选择Android分类，右边点击Add按钮选择以添加MyCoreLib类库到项目：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459047099.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML673f825" border="0" alt="SNAGHTML673f825" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459077919.png" width="655" height="888" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;完成后即添加到项目中来了：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459079622.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459084148.png" width="273" height="222" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;此时还能看到gen目录下也已经有MyCoreLib的包名及其资源ID了：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459106265.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459114968.png" width="274" height="620" /&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p&gt;但此时你会发现字符串资源里莫名其妙多出两个之前已经删除的资源，这其实是因为此时已将引用的资源与程序默认包里的资源混编在一起了，你可以看到上面默认包里的资源ID和下面这里也是一模一样的。&lt;/p&gt; &lt;p&gt;换言之，你可以以使用本地资源的方式直接调用引用来的资源。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;测试调用公共库的资源&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;比如在AndroidManifest.xml里这样修改：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459134643.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459142300.png" width="1014" height="695" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;在java代码中也同样是使用调用默认资源的方式直接调用即可，当然也可以显示加入公共库的包名以调用；但加入显示包名的方法在XML文件中行不通，多次尝试都提示找不到资源，也就是说在XML中只能以调用默认包资源的方式调用公共库资源。&lt;/p&gt; &lt;p&gt;编译并运行效果：&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459173992.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SNAGHTML68111cd" border="0" alt="SNAGHTML68111cd" src="http://images.cnblogs.com/cnblogs_com/SkyD/201109/201109010459198684.png" width="827" height="592" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;可以看到之前我们在公共库中设置的资源内容被正确显示出来了。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;结语&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;这种调用方式不只是使资源调用成为可能，公共代码在编辑起来也比jar方式方便许多，非常实用。&lt;/p&gt; &lt;p&gt;之前网上寻找此方法许久都没获知，此时突然想起参考Scoreloop的引用方法，总算将其搞明白了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/2161502.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/09/01/2161502.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2011/02/01/1948785.html</id><title type="text">Android 超级水平仪 金属红色仪表风格发布</title><summary type="text">下载：http://cid-0612298d2255e149.office.live.com/self.aspx/.Public/%E8%BD%AF%E4%BB%B6/SuperBubbleLevel...</summary><published>2011-02-01T14:12:00Z</published><updated>2011-02-01T14:12:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2011/02/01/1948785.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2011/02/01/1948785.html"/><content type="html">&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 22px 22px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="SuperBubbleLevelIconr" border="0" alt="SuperBubbleLevelIconr" align="right" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012210583952.jpg" width="105" height="105" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012210593768.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="spbs" border="0" alt="spbs" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/20110201221100279.jpg" width="200" height="140" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211031623.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SBLMarketShow3" border="0" alt="SBLMarketShow3" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211074103.jpg" width="1044" height="520" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjQwOTQzOTY0/v.swf" quality="high" width="480" height="400" align="center" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201102/20110201221113553.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="豌豆荚截屏(72)" border="0" alt="豌豆荚截屏(72)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211218937.png" width="500" height="820" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201102/2011020122112754.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="豌豆荚截屏(73)" border="0" alt="豌豆荚截屏(73)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211351436.png" width="500" height="820" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211398343.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="豌豆荚截屏(74)" border="0" alt="豌豆荚截屏(74)" src="http://images.cnblogs.com/cnblogs_com/SkyD/201102/201102012211472691.png" width="500" height="820" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;下载：&lt;a href="http://cid-0612298d2255e149.office.live.com/self.aspx/.Public/%E8%BD%AF%E4%BB%B6/SuperBubbleLevelRed.apk" target="_blank"&gt;http://cid-0612298d2255e149.office.live.com/self.aspx/.Public/%E8%BD%AF%E4%BB%B6/SuperBubbleLevelRed.apk&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/1948785.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/02/01/1948785.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/SkyD/archive/2011/01/31/1948290.html</id><title type="text">Android 新作 —— 语音购物清单</title><summary type="text">方便实用的日常工具。当你想起要买什么东西时，就可以通过它的语音输入功能来快速记录下来，这样下次去超市时只要参照这个清单，就不会有遗漏了。另外此程序还支持通过“Google购物搜索”查询已登商品信息的功...</summary><published>2011-01-31T07:20:00Z</published><updated>2011-01-31T07:20:00Z</updated><author><name>斯克迪亚</name><uri>http://www.cnblogs.com/SkyD/</uri></author><link rel="alternate" href="http://www.cnblogs.com/SkyD/archive/2011/01/31/1948290.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/SkyD/archive/2011/01/31/1948290.html"/><content type="html">&lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 22px 22px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top: 0px; border-right: 0px; padding-top: 0px" title="vsliconb2" border="0" alt="vsliconb2" align="right" src="http://images.cnblogs.com/cnblogs_com/SkyD/201101/201101311519252777.jpg" width="110" height="110" /&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201101/201101311519267337.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="icsh" border="0" alt="icsh" src="http://images.cnblogs.com/cnblogs_com/SkyD/201101/201101311519272976.jpg" width="200" height="140" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;方便实用的日常工具。&lt;br /&gt;当你想起要买什么东西时，就可以通过它的语音输入功能来快速记录下来，这样下次去超市时只要参照这个清单，就不会有遗漏了。&lt;br /&gt;另外此程序还支持通过&amp;#8220;Google购物搜索&amp;#8221;查询已登商品信息的功能，便于与超市中的售价作对比。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;embed src="http://player.youku.com/player.php/sid/XMjQwNTU1NDg0/v.swf" quality="high" width="480" height="400" align="center" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/SkyD/201101/201101311519288681.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="vslshow" border="0" alt="vslshow" src="http://images.cnblogs.com/cnblogs_com/SkyD/201101/201101311519338129.jpg" width="980" height="1620" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下载：&lt;a title="http://goo.gl/5Wai7" href="http://goo.gl/5Wai7" target="_blank"&gt;http://goo.gl/5Wai7&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/SkyD/aggbug/1948290.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/SkyD/archive/2011/01/31/1948290.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
