<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEQGR3wyeip7ImA9WhRaE0Q.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332</id><updated>2012-02-16T19:38:46.292+08:00</updated><category term="xml" /><category term="J2ME" /><category term="MyWorks" /><category term="App" /><category term="JBoss" /><category term="jQuery" /><category term="Plurk" /><category term="CSS" /><category term="cygwin" /><category term="Subversion" /><category term="VisualStudio" /><category term="Tweener" /><category term="ActionScript" /><category term="CAPTCHA" /><category term="GAE" /><category term="UI" /><category term="Papervision3D" /><category term="Blogger" /><category term="Java" /><category term="Flash Game" /><category term="book" /><category term="Google" /><category term="Ajax" /><category term="Programming" /><category term="JDBC" /><category term="C#" /><category term="PHP" /><category term="Flash" /><category term="Web Design" /><category term="RSS" /><category term="Firefox" /><category term="Ruby" /><category term="Works" /><category term="WindowsMobile 6" /><category term="Tools" /><category term="marketing" /><category term="windows" /><category term="Apache" /><category term="JavaScript" /><category term="Jsp" /><category term="SVN" /><category term="Android" /><category term="c++" /><category term="Facebook" /><category term="Red5" /><category term="Ant" /><category term="Silverlight" /><title>Tony's Blog</title><subtitle type="html">Take your passion and make it happen</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://tonycube.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>150</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/YJzd" /><feedburner:info uri="blogspot/yjzd" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;DE4AQXY8fyp7ImA9WhRaEk0.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-7988745434215293147</id><published>2012-02-13T22:40:00.002+08:00</published><updated>2012-02-14T16:09:00.877+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-14T16:09:00.877+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Works" /><title>人生第一筆廣告收入</title><content type="html">&lt;div class="img-caption" style="width: 250px;"&gt;&lt;img src="http://farm5.staticflickr.com/4038/4446554343_8c37635736_m.jpg" /&gt; Photo by &lt;a href="http://www.flickr.com/photos/sourmash/4446554343/"&gt;chrisphoto&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
我的部落格大概是從2008年開始寫，一開始是為了記錄學習經驗、備忘及分享心得，所以沒有放廣告。之後看了許多部落格有放廣告，所以也好奇的開始放廣告。一開始放BloggerAds的廣告，再來加入Google AdSense的廣告。說真的，不是人氣部落格的流量真的很少，轉換成廣告點擊率就別說了，結論就是，想靠部落格賺廣告費，你得成為很熱門的部落格才行，很熱的很熱的很熱！！真的。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
這部份我努力了很久，不過很難很累人，你得保持週期性的文章產出，而且文章必須是有質量的，不是爛芋充數的，才會讓人一直來一直來，來的目的是為了得到東西，不是為來而來。沒墨水就算你拿著筆也寫不出東西來，我的墨水老是一用就完&amp;gt;"&amp;lt;&lt;br /&gt;
&lt;br /&gt;
好吧，那我怎麼賺到廣告費呢？－－App。&lt;br /&gt;
&lt;br /&gt;
當初學程式設計時，是因為喜歡創作的感覺，我可以寫一個東西出來，讓人家用，我的開心是因為別人用了我寫的東西很開心而開心。在賈伯斯創造出App Store之前，寫程式這件事幾乎只能在公司做，我怎麼可能自己寫一個軟體自己賣呢？何況是附上廣告的免費軟體。每個軟體都是由公司規劃的，很難剛好和自己想做的一樣，整個環節就只有「寫程式」這件事，而少了「創作」，那感覺就像喜歡喝拿鐵咖啡，卻只能喝到咖啡而少了牛奶，苦啊~~~&lt;br /&gt;
&lt;br /&gt;
App剛好符合我能做的每件事－－用程式創作一些東西出來讓人使用。我實驗性的寫了第一支上架Android Market的App(&lt;a href="http://goo.gl/Da8Pw" target="_blank"&gt;MovieTime&lt;/a&gt;)並加上廣告，熟悉整個流程，程式開發 &amp;gt; 申請成為Android開發者($25) &amp;gt; 上架 &amp;gt; 加入Admob廣告 &amp;gt; 申請Paypal收取款項 &amp;gt; &lt;del&gt;&lt;/del&gt;&lt;br /&gt;
轉到台灣的銀行帳戶&lt;br /&gt;
(這部份還沒做)。&lt;br /&gt;
&lt;br /&gt;
App發佈3個月的廣告費就超過部落格3年多的好幾倍收入，差很大！！有點想把部落格的廣告拿掉，不然就是要想辦法成為人氣部落格，好吧~~拿掉好像比較快~Orz。&lt;br /&gt;
&lt;br /&gt;
給想寫App賺廣告費的人：&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;不要幻想廣告費收入會很高，廣告費收入和使用量成正相關，越多人用你的App，每天的使用率高，轉換成點擊率就越高。&lt;/li&gt;
&lt;li&gt;寫一個連你自己都會想用的App，使用族群要夠大，安裝量才會大，使用量夠，廣告曝光量才夠，廣告被點擊的機會才高。&lt;/li&gt;
&lt;li&gt;如果可以的話，朝國際級App邁進。台灣才多少人，拿智慧型手機的有多少人，拿Android/iOS/WP7的又把使用者分裂的更少(除非你寫跨平台通吃)，在這些使用者中對你的App感興趣就又更少了，當他們安裝後要經常使用的機會是多少，在這些使用的機會中看到感興趣的廣告並「點」下去的機會就又更少了。&lt;/li&gt;
&lt;/ol&gt;是競爭也是機會。想想看，在以前，一個小小程式設計師，怎麼可能把自己寫的軟體賣到全世界。現在和以前的差別只是多出了一條路而已，你一樣可以為公司或客戶寫軟體，但也可以選擇為自己寫軟體。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-7988745434215293147?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1vvYapMDsvfP1XnKhAhr1vJWumg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1vvYapMDsvfP1XnKhAhr1vJWumg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1vvYapMDsvfP1XnKhAhr1vJWumg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1vvYapMDsvfP1XnKhAhr1vJWumg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/7iiQiQty-_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/7988745434215293147/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2012/02/blog-post.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7988745434215293147?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7988745434215293147?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/7iiQiQty-_o/blog-post.html" title="人生第一筆廣告收入" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2012/02/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYESHc7eCp7ImA9WhRVGEw.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-5656887858637352717</id><published>2012-01-17T23:25:00.001+08:00</published><updated>2012-01-17T23:28:29.900+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T23:28:29.900+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Android上的圖形繪製</title><content type="html">&lt;div class="img-caption" style="width: 250px;"&gt;&lt;img border="0" height="360" src="http://2.bp.blogspot.com/-YnVRjeGWoQ0/TxWShNZj9yI/AAAAAAAABYw/Fu8Dm6qyR5o/s320/paint.png" width="240" /&gt;Paint Demo&lt;a href="http://www.blogger.com/post-create.g?blogID=380186287506750332"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;2D繪圖&lt;/h2&gt;在Android中繪圖要使用到&lt;a href="https://developer.android.com/reference/android/graphics/package-summary.html"&gt;android.graphics&lt;/a&gt;之下的類別，&lt;a href="https://developer.android.com/reference/android/graphics/Paint.html"&gt;Paint&lt;/a&gt;是畫筆，&lt;a href="https://developer.android.com/reference/android/graphics/Canvas.html"&gt;Canvas&lt;/a&gt;是畫布。當你繼承&lt;a href="https://developer.android.com/reference/android/view/View.html"&gt;View&lt;/a&gt;類別後，覆寫&lt;a href="https://developer.android.com/reference/android/view/View.html#onDraw%28android.graphics.Canvas%29"&gt;OnDraw(Canvas canvas)&lt;/a&gt;方法會得到一個畫布，你就可以在畫布上畫一些圖形。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
要使用自已的View，在程式碼中可以直接把它new出來，然後丟給setContentView。或是你也可以在xml檔中使用，使用方式必須加上Package名稱。&lt;br /&gt;
&lt;br /&gt;
例如：使用Android提供的TextView&lt;br /&gt;
&lt;pre&gt;&amp;lt;TextView android:Text="xxx" ..../&amp;gt;&lt;/pre&gt;使用你自己的View則是&lt;br /&gt;
&lt;pre&gt;&amp;lt;&lt;span style="color: red;"&gt;com.tonycube.demo.&lt;/span&gt;&lt;span style="color: blue;"&gt;PaintDemo&lt;/span&gt; android:id="@+id/paintView" ..../&amp;gt;&lt;/pre&gt;紅色部份是Package名稱，藍色部份是Class名稱。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;程式碼&lt;/h2&gt;PaintView.java(自己的View)&lt;br /&gt;
&lt;pre&gt;package com.tonycube.demo.paint;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

public class PaintView extends View {

    public PaintView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        
        //畫筆
        Paint paint = new Paint();        
        
        //畫布底色
        canvas.drawColor(Color.WHITE);
        
        //畫筆色(灰)
        paint.setColor(Color.GRAY);
        //畫圓
        canvas.drawCircle(160, 160, 150, paint);
        
        //畫方
        paint.setColor(Color.BLUE);
        Rect rect = new Rect(100, 110, 120, 130);
        canvas.drawRect(rect, paint);
        
        //畫圓角方
        paint.setColor(Color.GREEN);
        RectF rectf = new RectF(200, 110, 220, 130);
        canvas.drawRoundRect(rectf, 7, 7, paint);
        
        //畫弧
        paint.setColor(Color.YELLOW);
        RectF oval = new RectF(50, 150, 270, 250);
        canvas.drawArc(oval, 180, -180, true, paint);
        
        //畫字
        paint.setColor(Color.BLACK);
        canvas.drawText("Andy", 160, 350, paint);
    }
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
main.xml(layout)&lt;br /&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" &amp;gt;

    &amp;lt;TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" /&amp;gt;

    &amp;lt;com.tonycube.demo.paint.PaintView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/paintView" /&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
PaintDemoActivity.java(啟動畫面)&lt;br /&gt;
&lt;pre&gt;package com.tonycube.demo.paint;

import android.app.Activity;
import android.os.Bundle;

public class PaintDemoActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        
        PaintView pv = new PaintView(this, null);
        setContentView(pv);
    }
}&lt;/pre&gt;註解掉的部份是使用layout的xml，這裡則是在程式碼中直接建立。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-5656887858637352717?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/efkAjM6VGAtuZgX-1ZNNpwaPNcQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/efkAjM6VGAtuZgX-1ZNNpwaPNcQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/efkAjM6VGAtuZgX-1ZNNpwaPNcQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/efkAjM6VGAtuZgX-1ZNNpwaPNcQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/zrL_5AO3jf0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/5656887858637352717/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2012/01/android.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5656887858637352717?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5656887858637352717?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/zrL_5AO3jf0/android.html" title="Android上的圖形繪製" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-YnVRjeGWoQ0/TxWShNZj9yI/AAAAAAAABYw/Fu8Dm6qyR5o/s72-c/paint.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2012/01/android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECQXk6fyp7ImA9WhRSGEQ.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-2852224196869720445</id><published>2011-11-21T23:53:00.004+08:00</published><updated>2011-11-22T00:07:40.717+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-22T00:07:40.717+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>在Android中使用SQLite資料庫</title><content type="html">&lt;div class="img-caption" style="width: 230px;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-JuTfYLHHeik/TspyTDkSfvI/AAAAAAAABYA/3a50OBFPuIc/s1600/sqlitelogo.gif" /&gt; &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt; Demo&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;SQLite簡介&lt;/h2&gt;之前介紹的資料儲存方式之一是使用&lt;a href="http://tonycube.blogspot.com/2011/11/preferences.html" rel="bookmark"&gt;Preference&lt;/a&gt;來做少量資料的儲存，Preference採用Key-Value的方式來儲存，取資料的時候必須以Key去取得，若資料量大時，並不適合，這時候可以使用關聯式資料庫來做大量結構化資料的儲存。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt;是個輕量化的關聯式資料庫，它輕薄短小，無須設定或管理，沒有伺服器及組態檔，不需要資料庫管理員，它只是一個檔案，可以依須求四處移動，對移動裝置來說是非常好用的資料庫。Android把SQLite資料庫儲存在 &lt;span class="Apple-style-span" style="color: #cc0000;"&gt;/data/data/packagename/databases&lt;/span&gt; 目錄中，可以使用指令adb或ADT中的FileExplorer視圖來查看。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;資料庫在Android中的位置&lt;/h2&gt;當你的App建立時，若沒有使用到資料庫，在/data/data/packagename目錄中並不會有databases目錄，如下圖：&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" height="230" src="http://4.bp.blogspot.com/-Q6YpW5IfB04/TspyvZN7AeI/AAAAAAAABYI/zxx-D33aLp8/s400/sqlitedemo1.PNG" width="400" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
當你開始使用資料庫後，資料庫目錄及檔案就會被建立，如下圖：&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-RD85PTJ2Spc/Tspy9P6oZ4I/AAAAAAAABYQ/iHDTzTkFljQ/s1600/sqlitedemo2.PNG" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;SQLite使用重點&lt;/h2&gt;這裡假設你已經有使用SQL語法及資料庫管理的經驗，這裡只說明在Android中使用SQLite的注意事項。當你在建立資料表時，通常第一個資料欄位會命名為_id，並指定為主鍵，而且使用AUTOINCREMENT自動遞增1。這部份我在測試的時候，把主鍵命名為id，結果在取資料時，會出現找不到_id的錯誤，把主鍵名稱改為_id就正常了，所以應該還是依規定設為_id。&lt;br /&gt;
&lt;br /&gt;
在使用SQLite時，你並不用先去建立資料庫檔案，而由Android幫你建立。你必須繼承SQLiteOpenHelper類別，由它來負責管理資料庫的建立和版本控制。你必須覆寫onCreate及onUpgrade方法，當你第一次使用資料庫時(查詢或新增)，若Android找不到資料庫檔案，就會觸發onCreate方法來建立，若已經有檔案了，則不再建立。當資料庫結構有更新時，即版本號有更改，就會觸發onUpgrade方法來更新資料庫，可以砍掉重建，也可直接更新結構。&lt;br /&gt;
&lt;br /&gt;
在程式碼中，對於資料表欄位可以直接用字串寫在SQL語法中，可是一來可能誤打，當欄位要改名時，也必須一個一個去修改，不安全也沒效率。你可以繼承&lt;a href="http://developer.android.com/reference/android/provider/BaseColumns.html"&gt;BaseColumns介面&lt;/a&gt;，把資料表中的欄位以常數來建立，使用上較方便。使用時記得要先import進來。此外，在BaseColumns中不需再建立_id，因為BaseColumns介面已經預設有了，請看API。&lt;br /&gt;
&lt;br /&gt;
你也可以把資料和view做資料繫結，直接讓查詢結果顯示在view中。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;範例程式碼說明&lt;/h2&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0iz39M72pcY/TspzhHBDkLI/AAAAAAAABYY/5y37LcJ5-iA/s1600/sqlitedemo3.PNG" /&gt;&lt;br /&gt;
&lt;br /&gt;
SQLiteDemoActivity.java ：主要的顯示畫面，上方有4個文字輸入區，id只有在update及delete時才需輸入。中間有3個按鈕，而別是Add(新增)、Update(修改)、Delete(刪除)，下方有2個結果顯示區，上面那個以迴圈取得資料後顯示，下方的ListView則是以資料繫結的方式顯示。&lt;br /&gt;
&lt;br /&gt;
DBHelper.java ：用來管理資料庫的建立及更新。&lt;br /&gt;
&lt;br /&gt;
DbConstants.java ：資料庫欄位的常數值。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;範例程式碼&lt;/h2&gt;&lt;strong&gt;SQLiteDemoActivity.java&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;package com.tonycube.demo;

import static android.provider.BaseColumns._ID;
import static com.tonycube.demo.DbConstants.EMAIL;
import static com.tonycube.demo.DbConstants.NAME;
import static com.tonycube.demo.DbConstants.TABLE_NAME;
import static com.tonycube.demo.DbConstants.TEL;
import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;

public class SQLiteDemoActivity extends Activity implements OnClickListener {

    private DBHelper dbhelper = null;

    private TextView result = null;
    private ListView listData = null;
    private EditText editName = null;
    private EditText editTel = null;
    private EditText editEmail = null;
    private EditText editId = null;
    private Button btnAdd = null;
    private Button btnDel = null;
    private Button btnUpdate = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initView();

        openDatabase();
        show();
        showInList();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        closeDatabase();
    }

    private void openDatabase(){
        dbhelper = new DBHelper(this); 
    }

    private void closeDatabase(){
        dbhelper.close();
    }

    private void initView(){
        result = (TextView) findViewById(R.id.txtResult);
        listData = (ListView) findViewById(R.id.listData);
        editName = (EditText) findViewById(R.id.editName);
        editTel = (EditText) findViewById(R.id.editTel);
        editEmail = (EditText) findViewById(R.id.editEmail);
        editId = (EditText) findViewById(R.id.editId);
        btnAdd = (Button) findViewById(R.id.btnAdd);
        btnDel = (Button) findViewById(R.id.btnDel);
        btnUpdate = (Button) findViewById(R.id.btnUpdate);
        btnAdd.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        btnUpdate.setOnClickListener(this);        
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnAdd:
            add();
            break;

        case R.id.btnDel:
            del();
            break;

        case R.id.btnUpdate:
            update();
            break;

        default:
            break;
        }

        show();
        showInList();
    }

    private void add(){
        SQLiteDatabase db = dbhelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(NAME, editName.getText().toString());
        values.put(TEL, editTel.getText().toString());
        values.put(EMAIL, editEmail.getText().toString());
        db.insert(TABLE_NAME, null, values);

        cleanEditText();
    }

    private Cursor getCursor(){
        SQLiteDatabase db = dbhelper.getReadableDatabase();
        String[] columns = {_ID, NAME, TEL, EMAIL};

        Cursor cursor = db.query(TABLE_NAME, columns, null, null, null, null, null);
        startManagingCursor(cursor);

        return cursor;
    }

    private void show(){

        Cursor cursor = getCursor();

        StringBuilder resultData = new StringBuilder("RESULT: \n");

        while(cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            String tel = cursor.getString(2);
            String email = cursor.getString(3);

            resultData.append(id).append(": ");
            resultData.append(name).append(": ");
            resultData.append(tel).append(": ");
            resultData.append(email).append(": ");
            resultData.append("\n");
        }

        result.setText(resultData);
    }

    private void showInList(){

        Cursor cursor = getCursor();

        String[] from = {_ID, NAME, TEL, EMAIL};
        int[] to = {R.id.txtId, R.id.txtName, R.id.txtTel, R.id.txtEmail};

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.data_item, cursor, from, to);
        listData.setAdapter(adapter);
    }

    private void del(){
        String id = editId.getText().toString();

        SQLiteDatabase db = dbhelper.getWritableDatabase();
        db.delete(TABLE_NAME, _ID + "=" + id, null);

        cleanEditText();
    }

    private void update(){
        String id = editId.getText().toString();

        ContentValues values = new ContentValues();
        values.put(NAME, editName.getText().toString());
        values.put(TEL, editTel.getText().toString());
        values.put(EMAIL, editEmail.getText().toString());

        SQLiteDatabase db = dbhelper.getWritableDatabase();
        db.update(TABLE_NAME, values, _ID + "=" + id, null);

        cleanEditText();
    }

    private void cleanEditText(){
        editName.setText("");
        editTel.setText("");
        editEmail.setText("");
        editId.setText("");
    }

}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;DBHelper.java&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;package com.tonycube.demo;

import static com.tonycube.demo.DbConstants.TABLE_NAME;
import static android.provider.BaseColumns._ID;
import static com.tonycube.demo.DbConstants.NAME;
import static com.tonycube.demo.DbConstants.TEL;
import static com.tonycube.demo.DbConstants.EMAIL;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {

    private final static String DATABASE_NAME = "demo.db";
    private final static int DATABASE_VERSION = 1;

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        final String INIT_TABLE = "CREATE TABLE " + TABLE_NAME + " (" +
                                  _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                  NAME + " CHAR, " +
                                  TEL + " CHAR, " +
                                  EMAIL + " CHAR);"; 
        db.execSQL(INIT_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
        db.execSQL(DROP_TABLE);
        onCreate(db);
    }

}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;DbConstants.java&lt;/strong&gt;&lt;br /&gt;
&lt;pre&gt;package com.tonycube.demo;

import android.provider.BaseColumns;

public interface DbConstants extends BaseColumns {
    public static final String TABLE_NAME = "friends";

    public static final String NAME = "name";
    public static final String TEL = "tel";
    public static final String EMAIL = "email";
}&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
範例下載：&lt;a href="https://sites.google.com/site/tonycube2009/download/SQLiteDemo.zip?attredirects=0&amp;amp;d=1"&gt;SQLiteDemo.zip&lt;/a&gt;(直接匯入Eclipse即可)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-2852224196869720445?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vSJKJbkesgxtwwm7DdVF7hbMWW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vSJKJbkesgxtwwm7DdVF7hbMWW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vSJKJbkesgxtwwm7DdVF7hbMWW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vSJKJbkesgxtwwm7DdVF7hbMWW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/NgP76yrzY0g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/2852224196869720445/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/androidsqlite.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2852224196869720445?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2852224196869720445?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/NgP76yrzY0g/androidsqlite.html" title="在Android中使用SQLite資料庫" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-JuTfYLHHeik/TspyTDkSfvI/AAAAAAAABYA/3a50OBFPuIc/s72-c/sqlitelogo.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/androidsqlite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04BQXw9eSp7ImA9WhRSFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-9201704337676099156</id><published>2011-11-19T13:13:00.001+08:00</published><updated>2011-11-19T13:19:10.261+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T13:19:10.261+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Android如何使用GET, POST取得資料</title><content type="html">&lt;div class="img-caption" style="width: 330px;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-bZpEfqZQ20A/Tsc6UP7fu-I/AAAAAAAABX4/X-8fw7zW_l0/s1600/getpost.png" /&gt; Get, Post Demo&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;什麼是Get？什麼是Post？&lt;/h2&gt;對於寫網頁程式的人來說應該是不陌生，在網頁表單中，要送出資料時就會選擇要用Get的方式還是Post的方式。常見的Get方式是在網址後面加上查詢字串，像是&lt;br /&gt;
&lt;pre&gt;http://www.myweb.com/product?p=1&amp;amp;a=1&amp;amp;b=2&lt;/pre&gt;之類的，第一個用問號(?)，之後每個都用(&amp;amp;)。&lt;br /&gt;
&lt;br /&gt;
在Android中一樣可以用Get及Post去取得伺服器給予的資料。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;在Android中使用Get及Post的幾個提示&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;使用org.apache.http套件(也可以用別的)&lt;/li&gt;
&lt;li&gt;Androidmanifest.xml中要加入存取網路的授權&lt;/li&gt;
&lt;li&gt;清楚知道要使用Get還是Post&lt;/li&gt;
&lt;li&gt;如果抓網路資料時間太久，建議把它放到背景執行並加上Loading提示&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Get的使用步驟&lt;/h2&gt;&lt;br /&gt;
首頁你要建立一個HttpClient 物件：&lt;br /&gt;
&lt;pre&gt;HttpClient client = new DefaultHttpClient();&lt;/pre&gt;接著建立HttpGet物件並傳入網址：&lt;br /&gt;
&lt;pre&gt;HttpGet get = new HttpGet(_url);&lt;/pre&gt;當HttpClient執行Get任務後，會傳回HttpResponse ：&lt;br /&gt;
&lt;pre&gt;HttpResponse response = client.execute(get);&lt;/pre&gt;接下來就可以取得資料實體：&lt;br /&gt;
&lt;pre&gt;HttpEntity resEntity = response.getEntity();&lt;/pre&gt;你可以把它轉成字串來使用：&lt;br /&gt;
&lt;pre&gt;result = EntityUtils.toString(resEntity);&lt;/pre&gt;以上就是Get的基本操作。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Post的使用步驟&lt;/h2&gt;&lt;br /&gt;
一樣先建立HttpClient物件：&lt;br /&gt;
&lt;pre&gt;HttpClient client = new DefaultHttpClient();&lt;/pre&gt;接著建立HttpPost物件並傳入網址 ：&lt;br /&gt;
&lt;pre&gt;HttpPost post = new HttpPost(_url);&lt;/pre&gt;如果有參數的話，可以這樣加入：&lt;br /&gt;
&lt;pre&gt;List&amp;lt;NameValuePair&amp;gt; params = new ArrayList&amp;lt;NameValuePair&amp;gt;();
params.add(new BasicNameValuePair(_queryKey, _queryValue));
UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
post.setEntity(ent);&lt;/pre&gt;執行後一樣會傳回HttpResponse：&lt;br /&gt;
&lt;pre&gt;HttpResponse responsePOST = client.execute(post);&lt;/pre&gt;取得資料實體後可以轉成字串來用：&lt;br /&gt;
&lt;pre&gt;HttpEntity resEntity = responsePOST.getEntity();
result = EntityUtils.toString(resEntity);&lt;/pre&gt;以上是Post的操作方式。在參數的部份，接下來的範例只能加入一對(key-value)，若有需要多組參數的話，要改成陣列的方式。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;範例程式碼&lt;/h2&gt;&lt;pre&gt;package com.tonycube.demo;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class GetPostDemoActivity extends Activity {
    
    private TextView txtResult = null;
    private Button btnLoad = null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        initView();
    }
    
    
    private void loadPage() {
        String html = getHtmlByGet("http://zh.wikipedia.org/wiki/Wiki");
        txtResult.setText(html);
    }


    private void initView() {
        txtResult = (TextView) findViewById(R.id.txtResult);
        btnLoad = (Button) findViewById(R.id.btnLoad);
        btnLoad.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                loadPage();
            }
            
        });
    }




    public String getHtmlByPost(String _url, String _queryKey, String _queryValue){    
        
        String result = "";
        
        try {
            HttpClient client = new DefaultHttpClient();
                        
            HttpPost post = new HttpPost(_url);
            
            //參數
            if (_queryKey != ""){
                List&amp;lt;NameValuePair&amp;gt; params = new ArrayList&amp;lt;NameValuePair&amp;gt;();
                params.add(new BasicNameValuePair(_queryKey, _queryValue));
                UrlEncodedFormEntity ent = new UrlEncodedFormEntity(params, HTTP.UTF_8);
                post.setEntity(ent);
            }
            
            HttpResponse responsePOST = client.execute(post); 
            
            HttpEntity resEntity = responsePOST.getEntity();
            
            if (resEntity != null) {    
                result = EntityUtils.toString(resEntity);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    
            
        return result;
    }
    

    public String getHtmlByGet(String _url){    
        
        String result = "";
        
        try {
            HttpClient client = new DefaultHttpClient();
                        
            HttpGet get = new HttpGet(_url);
            
            HttpResponse response = client.execute(get); 

            HttpEntity resEntity = response.getEntity();
            
            if (resEntity != null) {    
                result = EntityUtils.toString(resEntity);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    
            
        return result;
        
    }
}&lt;/pre&gt;&lt;br /&gt;
&lt;h2&gt;在Androidmanifest.xml加入網路存取權限&lt;/h2&gt;&lt;pre&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"/&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-9201704337676099156?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G9WUVsxubIO67ZYtMTpVPekUXFk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G9WUVsxubIO67ZYtMTpVPekUXFk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G9WUVsxubIO67ZYtMTpVPekUXFk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G9WUVsxubIO67ZYtMTpVPekUXFk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/KJELJ60jloU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/9201704337676099156/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/androidget-post.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/9201704337676099156?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/9201704337676099156?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/KJELJ60jloU/androidget-post.html" title="Android如何使用GET, POST取得資料" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-bZpEfqZQ20A/Tsc6UP7fu-I/AAAAAAAABX4/X-8fw7zW_l0/s72-c/getpost.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/androidget-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIARX0-eSp7ImA9WhRSFk8.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-155301057540660227</id><published>2011-11-18T22:43:00.001+08:00</published><updated>2011-11-18T22:45:44.351+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T22:45:44.351+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>Galaxy Nexus新廣告</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CKCX6su1wKwCFUyo5godBDcAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1321627362695"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="padding-bottom: 10px;"&gt;Galaxy Nexus新廣告&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-top: 10px; padding-left: 10px;"&gt;&lt;div style="font-weight: bold; margin-bottom: 4px;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CKCX6su1wKwCFUyo5godBDcAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2F7N2E3bPei24%3Fgpinv%3DAMIXal-cgRz0UZrfG2tmHfJY0TG3JNeweQ4Iwk3CxiVSqV9HnX3ru-xgrpg6F6f6h6pHyR98IhGBv3zjyoVKt4nhExnIsgvej21woZcPOEsXnkVBoSdlLZk%26hl%3Dzh_TW&amp;amp;dt=1321627362695" style="text-decoration: none;"&gt;Galaxy Nexus: Calling All&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/CdD8s0jFJYo/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CdD8s0jFJYo&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/CdD8s0jFJYo&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;a href="http://www.youtube.com/v/CdD8s0jFJYo?hl=en&amp;amp;fs=1&amp;amp;autoplay=1" style="text-decoration: none;"&gt;youtube.com&lt;/a&gt;&amp;nbsp;- Introducing Galaxy Nexus: Simple. Beautiful. Beyond Smart.&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CKCX6su1wKwCFUyo5godBDcAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2F7N2E3bPei24%3Fgpinv%3DAMIXal-cgRz0UZrfG2tmHfJY0TG3JNeweQ4Iwk3CxiVSqV9HnX3ru-xgrpg6F6f6h6pHyR98IhGBv3zjyoVKt4nhExnIsgvej21woZcPOEsXnkVBoSdlLZk%26hl%3Dzh_TW&amp;amp;dt=1321627362695" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-155301057540660227?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/uOL24rmO8MK9SOumBUBAI2hjlT0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uOL24rmO8MK9SOumBUBAI2hjlT0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/uOL24rmO8MK9SOumBUBAI2hjlT0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/uOL24rmO8MK9SOumBUBAI2hjlT0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/5rchLHuPR9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/155301057540660227/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/galaxy-nexus.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/155301057540660227?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/155301057540660227?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/5rchLHuPR9w/galaxy-nexus.html" title="Galaxy Nexus新廣告" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/galaxy-nexus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAEQXk7eSp7ImA9WhRSFUQ.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-7917065676106033252</id><published>2011-11-18T13:38:00.000+08:00</published><updated>2011-11-18T13:38:20.701+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T13:38:20.701+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>從下載量看應用程式的開發方向</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMjt_oK7v6wCFcRW5godylMAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1321594460816"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="padding-bottom: 10px;"&gt;[重點整理]&lt;br /&gt;
1.下載排行國：美(50%)、韓(9%)、英、德、法、日&lt;br /&gt;
2.付費應用只佔32.4%&lt;br /&gt;
&lt;br /&gt;
[我的結論]&lt;br /&gt;
單純以獲利為目標來看，應該開發內含廣告的免費應用，並且以美國為主。&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-bottom: 10px; padding-left: 10px;"&gt;&lt;a href="http://www.weiphone.com/gphone/news/2011-11-17/South_Korea_into_the_second_Android_application_market_reached_603_million_downloads_327793.shtml"&gt;&lt;img border="0" src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://s2.googleusercontent.com/s2/favicons?domain%3Dwww.weiphone.com&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=16" style="margin-right: 5px;" /&gt;&lt;span style="font-weight: bold;"&gt;韩国成第二大Android应用市场 下载量达6.03亿 research2guidance,应用&lt;wbr&gt;&lt;/wbr&gt;下载量,韩国,Android _WeiPhone威锋网&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 10px;"&gt;据国外媒体报道，市场研究公司resear&lt;wbr&gt;&lt;/wbr&gt;ch2guidance今天上午发表报告称&lt;wbr&gt;&lt;/wbr&gt;，按应用下载量计算，韩国是第二大Andr&lt;wbr&gt;&lt;/wbr&gt;oid市场，迄今为止，韩国Android&lt;wbr&gt;&lt;/wbr&gt;应用下载量达到6.03亿次，市场份额为9&lt;wbr&gt;&lt;/wbr&gt;%。&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMjt_oK7v6wCFcRW5godylMAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2F37XPoZY8iCc%3Fgpinv%3DAMIXal_bH-CndeKkBxlv_iV059rrGThPFSWI7-BOU5FfzmC3zg-WRPHDj3czS27TGJ_CQHNG0QU3jgVPmbwzmE_0xDTJZnrCdD9nIalPnt6pil2f1DSp1mM%26hl%3Dzh_TW&amp;amp;dt=1321594460816" style="margin-right: 10px;"&gt;&lt;img border="0" src="https://images3-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http://images.weiphone.com/attachments/Day_111117/7_264675_68a113b5c97c840.jpg&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=120" style="max-height: 200px; max-width: 275px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMjt_oK7v6wCFcRW5godylMAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2F37XPoZY8iCc%3Fgpinv%3DAMIXal_bH-CndeKkBxlv_iV059rrGThPFSWI7-BOU5FfzmC3zg-WRPHDj3czS27TGJ_CQHNG0QU3jgVPmbwzmE_0xDTJZnrCdD9nIalPnt6pil2f1DSp1mM%26hl%3Dzh_TW&amp;amp;dt=1321594460816" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-7917065676106033252?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NZnIY0MREpdyG6uyJ__bEUJCmlo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NZnIY0MREpdyG6uyJ__bEUJCmlo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NZnIY0MREpdyG6uyJ__bEUJCmlo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NZnIY0MREpdyG6uyJ__bEUJCmlo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/O0CNgMQtAi0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/7917065676106033252/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/blog-post.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7917065676106033252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7917065676106033252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/O0CNgMQtAi0/blog-post.html" title="從下載量看應用程式的開發方向" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8CQnw9fyp7ImA9WhRSFUU.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-1672291040749757226</id><published>2011-11-17T23:36:00.006+08:00</published><updated>2011-11-18T11:44:23.267+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T11:44:23.267+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>使用Preference儲存偏好設定</title><content type="html">&lt;div class="img-caption" style="width: 330px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-zT101AtIbKw/TsUprmtLQcI/AAAAAAAABXs/-mVoQmA6GlE/s1600/preferences.png" /&gt; Preference Demo &lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;Preference快速上手&lt;/h2&gt;在Android上儲存資料的方式之一，是使用Preference來儲存，雖然這個類別看起來好像只能儲存"偏好設定"，但其實可以依你的需求來儲存少量化的任何資料。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
首先，你必須在Activity中取得Preferences物件：&lt;br /&gt;
&lt;pre&gt;SharedPreferences pref = getSharedPreferences("自訂名稱", 0);&lt;/pre&gt;接著你就能存入資料：&lt;br /&gt;
&lt;pre&gt;pref.edit().putString("資料關鍵字key", "資料內容value").commit();&lt;/pre&gt;除了可以put字串外，還有數字及布林值可以儲存。接著就可以取出資料：&lt;br /&gt;
&lt;pre&gt;String info = pref.getString("資料關鍵字key", "在取不到資料時的預設值");&lt;/pre&gt;就這麼簡單。記得put字串就要用相對應的get字串方法來取資料，如果putInt就要用getInt來取。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;範例解說&lt;/h2&gt;2個文字輸入區，3個按鈕。Save按鈕會把上方的文字輸入區中的文字存入Preference，Load按鈕會把Preference中的資料取出並在下方的文字輸入區顯示。當按下Exit按鈕把App關閉後，當App再度開啟時，直接按下Load按鈕，資料就會直接取回並在下方文字區顯示。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;範例程式碼&lt;/h2&gt;&lt;pre&gt;package com.tonycube.demo;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class PreferencesDemoActivity extends Activity implements OnClickListener {

    private final String PREF_SETTING = "SETTING";
    private SharedPreferences pref = null;
    
    private TextView txtInput = null;
    private TextView txtOutput = null;
    private Button btnSave = null;
    private Button btnLoad = null;
    private Button btnExit = null;
    
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        initView();
    }
    
    private void initView(){
        txtInput = (TextView) findViewById(R.id.txtInput);
        txtOutput = (TextView) findViewById(R.id.txtOutput);
        btnSave = (Button) findViewById(R.id.btnSave);
        btnLoad = (Button) findViewById(R.id.btnLoad);
        btnExit = (Button) findViewById(R.id.btnExit);
        
        btnSave.setOnClickListener(this);
        btnLoad.setOnClickListener(this);
        btnExit.setOnClickListener(this);
        
        pref = getSharedPreferences(PREF_SETTING, 0);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btnSave:
            pref.edit().putString("info", txtInput.getText().toString()).commit();
            break;
            
        case R.id.btnLoad:
            String info = pref.getString("info", "default value");
            txtOutput.setText(info);
            break;

        case R.id.btnExit:
            finish();
            break;
            
        default:
            break;
        }
    }
}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-1672291040749757226?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GSjgq47c5EBrQwcTq6cgbgHxf4k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GSjgq47c5EBrQwcTq6cgbgHxf4k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GSjgq47c5EBrQwcTq6cgbgHxf4k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GSjgq47c5EBrQwcTq6cgbgHxf4k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/nVghwXb7Fi8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/1672291040749757226/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/preferences.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1672291040749757226?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1672291040749757226?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/nVghwXb7Fi8/preferences.html" title="使用Preference儲存偏好設定" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-zT101AtIbKw/TsUprmtLQcI/AAAAAAAABXs/-mVoQmA6GlE/s72-c/preferences.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/preferences.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0EAQHg_fyp7ImA9WhRSFE0.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-5497355335066785864</id><published>2011-11-16T09:07:00.000+08:00</published><updated>2011-11-16T09:07:21.647+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-16T09:07:21.647+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Flash" /><title>關於Flash我的想法</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMiZuOz6uawCFYlL5godPhgAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1321405434958"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="padding-bottom: 10px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;[Flash]我的想法：以需求來看，哪些地方需要(必需)用到Flash，才是Flash能繼續存在的理&lt;/span&gt;&lt;wbr style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;由，這是以使用者角度來看而非開發者，開發者只能跟著需求走。需求會導致某個技術的高使用度，開發者就會自&lt;/span&gt;&lt;wbr style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;然進入這個技術，就像Flash剛出現時，大家對於網頁上動畫的需求，讓Flash大量出現，但同時期的D&lt;/span&gt;&lt;wbr style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;irector卻漸漸消失，現在的狀況其實和當時Flash興盛而Director沒落的情況有點像。&lt;/span&gt;&lt;br style="color: black; font-family: arial, sans-serif; line-height: 18px;" /&gt;&lt;br style="color: black; font-family: arial, sans-serif; line-height: 18px;" /&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;現在&lt;/span&gt;&lt;wbr style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;的Flash技術其實發展得很棒，資源很豐富，非常不希望看到它消失，但是真的必須找到無可取代的立足點才&lt;/span&gt;&lt;wbr style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;&lt;/wbr&gt;&lt;span class="Apple-style-span" style="color: black; font-family: arial, sans-serif; line-height: 18px;"&gt;行。&lt;/span&gt;&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-bottom: 10px; padding-left: 10px;"&gt;&lt;a href="http://www.36kr.com/p/60366.html"&gt;&lt;img border="0" src="https://images3-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://s2.googleusercontent.com/s2/favicons?domain%3Dwww.36kr.com&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=16" style="margin-right: 5px;" /&gt;&lt;span style="font-weight: bold;"&gt;Adobe将捐赠Flex SDK，开发者如何反应？ | 36氪&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 10px;"&gt;近日，Spoon Project发布了一份通告说：在未来的&lt;wbr&gt;&lt;/wbr&gt;几周内，Adobe将和Spoon基金会一&lt;wbr&gt;&lt;/wbr&gt;起合作将Flex SDK捐给一家著名的开源基金会。该项目会&lt;wbr&gt;&lt;/wbr&gt;由Flex SDK团队的开发者，Spoon Project的成员还有Flex的社区开&lt;wbr&gt;&lt;/wbr&gt;发者和企业用户开发者一起领导。不过其中并&lt;wbr&gt;&lt;/wbr&gt;没有明确提到Adob...&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMiZuOz6uawCFYlL5godPhgAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2FWvQvsM85hoV%3Fgpinv%3DAMIXal-SQVj-7jzW1zoOPkW8bbC1O1bG1671LU7nJ9zIAzXWKUB-mWGRiHPw4J8LF5xYB8lZRvVYQAGbQha8hSLyksDwH9UjTGuMrK0ZbD5K7bNRFB2YnFs%26hl%3Dzh_TW&amp;amp;dt=1321405434958" style="margin-right: 10px;"&gt;&lt;img border="0" src="https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http://img01.36krcnd.com/wp-content/uploads/2011/11/fl_appicon_200.jpg&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=120" style="max-height: 200px; max-width: 275px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CMiZuOz6uawCFYlL5godPhgAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2FWvQvsM85hoV%3Fgpinv%3DAMIXal-SQVj-7jzW1zoOPkW8bbC1O1bG1671LU7nJ9zIAzXWKUB-mWGRiHPw4J8LF5xYB8lZRvVYQAGbQha8hSLyksDwH9UjTGuMrK0ZbD5K7bNRFB2YnFs%26hl%3Dzh_TW&amp;amp;dt=1321405434958" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-5497355335066785864?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2Okk8hPpY9F_Lgg3iTjpLKcKsmQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2Okk8hPpY9F_Lgg3iTjpLKcKsmQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2Okk8hPpY9F_Lgg3iTjpLKcKsmQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2Okk8hPpY9F_Lgg3iTjpLKcKsmQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/TVKLHbAEU7I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/5497355335066785864/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/flash.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5497355335066785864?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5497355335066785864?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/TVKLHbAEU7I/flash.html" title="關於Flash我的想法" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/flash.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEFRn46eip7ImA9WhRTF08.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-1173520005725824429</id><published>2011-11-08T11:22:00.001+08:00</published><updated>2011-11-08T11:23:37.012+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-08T11:23:37.012+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="App" /><category scheme="http://www.blogger.com/atom/ns#" term="MyWorks" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>TonyCube Studio 專頁建立(Google+Page)</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CICG5c2KpqwCFZIr5godDgIAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1320722470881"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="font-weight: bold; padding-bottom: 10px;"&gt;Tony Lu&lt;/div&gt;&lt;div style="padding-bottom: 10px;"&gt;Google+Page試用，建了一個用來&lt;wbr&gt;&lt;/wbr&gt;介紹App的專頁。&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-bottom: 10px; padding-left: 10px;"&gt;&lt;a href="https://plus.google.com/u/0/b/104531476338885254706/"&gt;&lt;img border="0" src="https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://s2.googleusercontent.com/s2/favicons?domain%3Dplus.google.com&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=16" style="margin-right: 5px;" /&gt;&lt;span style="font-weight: bold;"&gt;TonyCube Studio&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 10px;"&gt;TonyCube Studio has not filled out their profile yet.&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CICG5c2KpqwCFZIr5godDgIAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2FDuySuqAD1Jw%3Fgpinv%3DAMIXal-fc1Z05mHkdMVTkC3zCLEgOMdslamCKBFDr5q4QpOFR-yIUDLvAe2XzTqXBlro-6UcFK4qy8AzaHX7kVEJpKO-ADOsFXBrKE8hYr475dOQb4U_40M%26hl%3Dzh_TW&amp;amp;dt=1320722470881" style="margin-right: 10px;"&gt;&lt;img border="0" src="https://lh3.googleusercontent.com/-Qk4rId0qwaI/AAAAAAAAAAI/AAAAAAAAABQ/xcbLEwLslRI/h120/photo.jpg" style="max-height: 200px; max-width: 275px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://plus.google.com/u/0/112671541218668335267/posts/Wkx6BU7KT3T" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-1173520005725824429?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RZoexwQ38HXNCfRNBlsCPPnILcI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RZoexwQ38HXNCfRNBlsCPPnILcI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RZoexwQ38HXNCfRNBlsCPPnILcI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RZoexwQ38HXNCfRNBlsCPPnILcI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/1Lt0biFbIyM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/1173520005725824429/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/googlepageapp.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1173520005725824429?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1173520005725824429?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/1Lt0biFbIyM/googlepageapp.html" title="TonyCube Studio 專頁建立(Google+Page)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/googlepageapp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QDQnY7fyp7ImA9WhRTFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-3723037199574488335</id><published>2011-11-07T23:22:00.000+08:00</published><updated>2011-11-07T23:22:53.807+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T23:22:53.807+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>如何把G+的文章同步發佈到Blogger</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CLCNpN3ppKwCFcEL5godakAAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1320679285264"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="padding-bottom: 10px;"&gt;如何把G+的文章同步發佈到Blogger&lt;wbr&gt;&lt;/wbr&gt;&lt;br /&gt;
1.Blogger管理界面 &amp;gt; 設定 &amp;gt; 電子郵件及手機號碼 &amp;gt; 張貼選項。&lt;br /&gt;
2.在電子郵件發佈地址欄填入"&lt;wbr&gt;&lt;/wbr&gt;只有自己知道的值"，然後選取"將電子郵件&lt;wbr&gt;&lt;/wbr&gt;儲存為草稿文章" &amp;gt; 儲存設定。&lt;br /&gt;
&lt;b&gt;***************&lt;wbr&gt;&lt;/wbr&gt;********************&lt;wbr&gt;&lt;/wbr&gt;********************&lt;wbr&gt;&lt;/wbr&gt;****&lt;/b&gt;&lt;br /&gt;
3.到Google+ &amp;gt; 新增一個新的社交圈 &amp;gt; 新增一個人，就是把剛才在Blogger中&lt;wbr&gt;&lt;/wbr&gt;的 [郵件地址."只有自己知道的值"@&lt;a class="ot-anchor" href="http://blogger.com/"&gt;blo&lt;wbr&gt;&lt;/wbr&gt;gger.com&lt;/a&gt;]填入後確定。&lt;br /&gt;
4.發文時&lt;wbr&gt;&lt;/wbr&gt;，記得把這個這個社交圈加入(或用+帳號的&lt;wbr&gt;&lt;/wbr&gt;方式也行)，如此文章就會同步發到Blog&lt;wbr&gt;&lt;/wbr&gt;ger。&lt;br /&gt;
&lt;b&gt;****************&lt;wbr&gt;&lt;/wbr&gt;********************&lt;wbr&gt;&lt;/wbr&gt;********************&lt;wbr&gt;&lt;/wbr&gt;***&lt;/b&gt;&lt;br /&gt;
5.但是呢？這其實是半同步啦~~你&lt;wbr&gt;&lt;/wbr&gt;得到Blogger去稍做文章的修改，然後&lt;wbr&gt;&lt;/wbr&gt;才能發佈。&lt;br /&gt;
(1)把不必要的文字刪掉，尤其&lt;wbr&gt;&lt;/wbr&gt;是發文的email，也就是那個"只有自己&lt;wbr&gt;&lt;/wbr&gt;知道的值"的mail刪掉，不然大家都可以&lt;wbr&gt;&lt;/wbr&gt;發文到你的Blog了。&lt;br /&gt;
(2)自行加上標題&lt;wbr&gt;&lt;/wbr&gt;及標籤。&lt;br /&gt;
&lt;br /&gt;
大功告成，算是半自動吧~~&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-bottom: 10px; padding-left: 10px;"&gt;&lt;a href="http://google-plus.com/429/how-to-cross-post-from-google-plus-to-blogger-or-blogspot-com-automatically/"&gt;&lt;img border="0" src="https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://s2.googleusercontent.com/s2/favicons?domain%3Dgoogle-plus.com&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=16" style="margin-right: 5px;" /&gt;&lt;span style="font-weight: bold;"&gt;How to cross post from google plus to blogger or blogspot.com automatically? | Google-Plus.com&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 10px;"&gt;How to cross post from google plus to blogger or blogspot.com automatically everytime you share news, links, videos or any piece of content automatically&lt;/div&gt;&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CLCNpN3ppKwCFcEL5godakAAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2FNc3Pxg7cVqK%3Fgpinv%3DAMIXal-SsFMv7lvKWzuuD9djkcNwdrRuaUfwtdPNKlyMe1nP6ezoaCmnTOWjpQfVV3oDTtSsuYXzPD6yFxeAE9PcPnpwhwvHx0h7iqFMviS-yFSv6Hl2ujA%26hl%3Dzh_TW&amp;amp;dt=1320679285264" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-3723037199574488335?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/w_mYeXJXlpMiot72TLRunr1jWOM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_mYeXJXlpMiot72TLRunr1jWOM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/w_mYeXJXlpMiot72TLRunr1jWOM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/w_mYeXJXlpMiot72TLRunr1jWOM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/MLrjpplCymo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/3723037199574488335/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/gblogger.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/3723037199574488335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/3723037199574488335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/MLrjpplCymo/gblogger.html" title="如何把G+的文章同步發佈到Blogger" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/gblogger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUNRXc-fSp7ImA9WhRTFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-7746888346043077359</id><published>2011-11-07T23:03:00.001+08:00</published><updated>2011-11-07T23:04:54.955+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-07T23:04:54.955+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="marketing" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>App的行銷方式</title><content type="html">&lt;table cellpadding="0" cellspacing="0" style="background-color: white; font-family: Arial;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="padding-right: 15px; vertical-align: top;"&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CIDjt9DkpKwCFcRW5godWHIAAA&amp;amp;path=%2F112671541218668335267&amp;amp;dt=1320677916147"&gt;&lt;img height="75" src="https://lh6.googleusercontent.com/-UutOEv3iKIE/AAAAAAAAAAI/AAAAAAAABOQ/cfQpruY6LA0/s75-c-k-a/photo.jpg" style="border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px;" width="75" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style="color: #333333; font: normal normal normal 13px/normal Arial; vertical-align: top; width: 578px;"&gt;&lt;div style="padding-bottom: 10px;"&gt;使用者在網路上找資料的方式偏向使用關鍵字&lt;wbr&gt;&lt;/wbr&gt;搜尋，找App的方式則偏向從排行榜去找。&lt;wbr&gt;&lt;/wbr&gt;所以App的曝光必須有技巧(心機)的讓它&lt;wbr&gt;&lt;/wbr&gt;出現在排行榜，越前面越好。&lt;/div&gt;&lt;div style="border-left-color: rgb(234, 234, 234); border-left-style: solid; border-left-width: 2px; margin-bottom: 10px; padding-left: 10px;"&gt;&lt;a href="http://blog.flurry.com/bid/76874/iOS-Android-Apps-Challenged-by-Traffic-Acquisition-Not-Discovery"&gt;&lt;img border="0" src="https://images1-focus-opensocial.googleusercontent.com/gadgets/proxy?url=https://s2.googleusercontent.com/s2/favicons?domain%3Dblog.flurry.com&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=16" style="margin-right: 5px;" /&gt;&lt;span style="font-weight: bold;"&gt;iOS &amp;amp; Android Apps Challenged by Traffic Acquisition Not Discovery&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="padding-bottom: 10px;"&gt;With few ways for developers to engage iOS app users after the download, the industry faces a traffic acquisition challenge, not a discovery one.&lt;/div&gt;&lt;a href="https://plus.google.com/_/notifications/ngemlink?&amp;amp;emid=CIDjt9DkpKwCFcRW5godWHIAAA&amp;amp;path=%2F112671541218668335267%2Fposts%2F4gvA33ZA7e1%3Fgpinv%3DAMIXal-Qnd9vwj_flck5AYmiNUncQhv7yKtSUm4KZvYSByddrJCdnMf6yBRvHWCXMPxeLjyL1JQNwJtLny3aIBHYtYTgXruqDUqSLSiEl82AIf3_1RhSWHY%26hl%3Dzh_TW&amp;amp;dt=1320677916147" style="margin-right: 10px;"&gt;&lt;img border="0" src="https://images2-focus-opensocial.googleusercontent.com/gadgets/proxy?url=http://blog.flurry.com/Portals/41620/images/Flurry_AvailableApps_AppStore_vs_AndroidMarket-resized-600.png&amp;amp;container=focus&amp;amp;gadget=a&amp;amp;rewriteMime=image/*&amp;amp;refresh=31536000&amp;amp;resize_h=120" style="max-height: 200px; max-width: 275px;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="https://plus.google.com/112671541218668335267/posts/1XhikYrzhBc" style="color: #3366cc; text-decoration: none;"&gt;查看Tony Lu的訊息或在當中留言 »&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-7746888346043077359?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/lZP9Or1RYOE5DPIBJMj7yNHNfnw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lZP9Or1RYOE5DPIBJMj7yNHNfnw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/lZP9Or1RYOE5DPIBJMj7yNHNfnw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/lZP9Or1RYOE5DPIBJMj7yNHNfnw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/M8JjuPfY7xE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/7746888346043077359/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/11/app.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7746888346043077359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7746888346043077359?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/M8JjuPfY7xE/app.html" title="App的行銷方式" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/11/app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMNRHs_eyp7ImA9WhdaFkk.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-1768364017208851488</id><published>2011-10-26T23:43:00.004+08:00</published><updated>2011-10-26T23:54:55.543+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-26T23:54:55.543+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>禁止旋轉螢幕時重新載入畫面(Don't reload, when rotate device)</title><content type="html">&lt;div class="img-caption" style="width: 144px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-wcBDVqxtRqQ/TqgsZsy2RYI/AAAAAAAABV8/_E5rhOCdrmo/Android_ScreenRotation.JPG" width="134" /&gt;Photo by &lt;a href="http://eigo.co.uk/News-Article.aspx?NewsArticleID=103"&gt;eigo&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Activity在執行時，可以直向或橫向顯示，當旋轉螢幕時，系統會自動做翻轉的動作。這在沒有載入資料的Activity中是沒問題的，但若有些資料是從網路下載下來，當旋轉螢幕時，會全部重新執行一次，因為Android對旋轉的做法是，把原先的Activity給Destroy掉，然後再Create一個新的不同方向的Activity。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
如果不想讓Activity在旋轉螢幕時被自動轉向，可以在AndroidManifest.xml中設定Activity的屬性：&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;android:screenOrientation="portrait" (指定為直向)&lt;/li&gt;
&lt;li&gt;android:configChanges="keyboard|keyboardHidden|orientation" (告訴系統，我要自己處理轉向問題)&lt;/li&gt;
&lt;/ul&gt;&lt;pre&gt;&amp;lt;activity
            android:label="@string/app_name"
            android:name=".RotationDeviceDemoActivity" 
            &lt;span style="color: red;"&gt;android:configChanges="keyboard|keyboardHidden|orientation" &lt;/span&gt;
&lt;span style="color: red;"&gt;            android:screenOrientation="portrait"&lt;/span&gt;&amp;gt;
            &amp;lt;intent-filter &amp;gt;
                &amp;lt;action android:name="android.intent.action.MAIN" /&amp;gt;
                &amp;lt;category android:name="android.intent.category.LAUNCHER" /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
&amp;lt;/activity&amp;gt;&lt;/pre&gt;&lt;br /&gt;
原本我以為只要指定configChanges="orientation"來處理轉向就好，但不能單只有這個，還必須加上keyboard及keyboardHidden這兩個當螢幕鍵盤出現的時候也要處理，才能正常執行。&lt;br /&gt;
&lt;br /&gt;
如此你可以在Activity的onConfigurationChanged方法中自己處理螢幕旋時要如何處理。&lt;br /&gt;
&lt;br /&gt;
以下會做兩個測試，一個是有鎖定螢幕方向，一個沒有。&lt;br /&gt;
&lt;br /&gt;
測試的程式碼：&lt;br /&gt;
&lt;pre&gt;public class RotationDeviceDemoActivity extends Activity {

    private final String TAG = "==DEMO==";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.d(TAG, "onCreate");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d(TAG, "onRestoreInstanceState");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState");
    }
}&lt;/pre&gt;&lt;br /&gt;
測試1：當Activity沒有設定configChanges及screenOrientation時(無鎖定螢幕方向)&lt;br /&gt;
&lt;br /&gt;
執行結果：&lt;br /&gt;
&lt;br /&gt;
523: D/==DEMO==(227): onCreate &amp;lt;===第一次開啟Activity&lt;br /&gt;
823: D/==DEMO==(227): onSaveInstanceState  &amp;lt;===旋轉螢幕時可讓你儲存狀態&lt;br /&gt;
823: D/==DEMO==(227): onDestroy  &amp;lt;===接著銷毀Activity&lt;br /&gt;
883: D/==DEMO==(227): onCreate  &amp;lt;===然後從新建立一個新的已轉向的Activity&lt;br /&gt;
883: D/==DEMO==(227): onRestoreInstanceState  &amp;lt;===並且可讓你取回剛才存下來的狀態&lt;br /&gt;
&lt;br /&gt;
測試2：有設定configChanges及screenOrientation(鎖定螢幕方向)&lt;br /&gt;
&lt;br /&gt;
執行結果：&lt;br /&gt;
&lt;br /&gt;
184: D/==DEMO==(324): onCreate  &amp;lt;===第一次開啟Activity&lt;br /&gt;
074: D/==DEMO==(324): onConfigurationChanged  &amp;lt;===旋轉螢幕&lt;br /&gt;
554: D/==DEMO==(324): onConfigurationChanged  &amp;lt;===再轉一次&lt;br /&gt;
&lt;br /&gt;
你會發現，Activity這時不會儲存狀態及銷毀，它只會執行onConfigurationChanged，不管你轉幾次方向，都只會觸發這方法。你可以自行在這裡指定不同的layout佈局，或什麼都不做。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-1768364017208851488?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T7WMsrAiNG6E10aFtbMtiaYmffw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T7WMsrAiNG6E10aFtbMtiaYmffw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T7WMsrAiNG6E10aFtbMtiaYmffw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T7WMsrAiNG6E10aFtbMtiaYmffw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/2DMSE_wBvqU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/1768364017208851488/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/10/dont-reload-when-rotate-device.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1768364017208851488?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1768364017208851488?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/2DMSE_wBvqU/dont-reload-when-rotate-device.html" title="禁止旋轉螢幕時重新載入畫面(Don't reload, when rotate device)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-wcBDVqxtRqQ/TqgsZsy2RYI/AAAAAAAABV8/_E5rhOCdrmo/s72-c/Android_ScreenRotation.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/10/dont-reload-when-rotate-device.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUDQ389fyp7ImA9WhdaEUU.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-443579218459315972</id><published>2011-10-15T00:34:00.003+08:00</published><updated>2011-10-21T16:54:32.167+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-21T16:54:32.167+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="MyWorks" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>開發心得：查看電影資訊及時刻表的App</title><content type="html">&lt;div class="img-caption" style="width: 223px;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-Kxwff5ozQuw/TphkQKkq1BI/AAAAAAAABVc/k3gnoB-X4qU/s320/movietime.png" width="213" /&gt;電影時刻 MovieTime&lt;/div&gt;&lt;br /&gt;
我的第1支上架到Android Market的App，今天終於完成並上傳。開發的原因是為了要練習Android，而練習的最佳方法就是實戰，因此實際做出一個能用有用的軟體，就是最好的練習。既然是練習，就不能把題目想太大，但又要有點深度，想要學到網路連練及一些界面跳轉等的實作，集合這些想法，最後決定以查詢電影資訊及時刻表的目標來製作。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
開發流程為：確定題目 &amp;gt; 界定功能範圍 &amp;gt; 畫界面草圖 &amp;gt; 開始寫Code &amp;gt; 反覆前面的流程 &amp;gt; 完成。&lt;br /&gt;
&lt;br /&gt;
基本上，我在確定題目及功能範圍後，花了點時間畫草圖，之後就開始寫Code了，並沒有在一開始花太多時間在計畫上，因為根據以往的經驗，計劃會在執行到一半的時候發生意想不到的事，很容易開頭想得天花亂墜，想得太過美好，結果實際執行時，卻困難重重。所以我的作法是，主要的基本功能不變，之後邊修正功能、畫草圖、寫Code這樣來回，速度很快，不會花了很長時間想的東西，實際上根本不好用或做不到，快速的讓結果實現，以功能為區分，把目標拆小，一次完成一個功能，每個功能就是這樣反覆，直到8成左右，雖然可用但不太好用的地步，就停止，換下個功能，讓每個功能都達到約8成左右進度，最後在來進行整合調整。&lt;br /&gt;
&lt;br /&gt;
我在App中加了廣告，只是想知道怎麼加廣告，廣告的實際收益如何等等。這次的開發完全遵守"邊移動邊開火"守則，快速讓作品完成。如果想要學會某樣東西，實際去做真得才能學到，而且學到很多。例如我光是做3種螢幕尺寸的圖就做到想吐，何況還有橫向和縱向兩種圖，等於要乘以2，做圖做到死吧XD，所以我偷了一點工，盡量讓有些圖可以在任意解析度使用，這樣只要做一張，而且我把螢幕鎖定成只能直著用，不用考慮橫向的操作，偷懶一下。&lt;br /&gt;
&lt;br /&gt;
還有，加廣告並不難也不麻煩，還滿簡單的，只是我搞不懂到底要用AdSense還是Admob，它們的關係好複雜(最後是用Admob)。另外，申請為Android Market開發者也很容易，只是上架App時有個小問題害我找好久。&lt;br /&gt;
&lt;br /&gt;
Android Market對於上架的App會依你的設定只給可用的手機"看到"，我設定的SDK版本是7，也就是2.1版以上的才能看到。我的Magic在現實上只支援到1.6版，雖然我自己把它刷成2.1版，可是Market是認機不認版本，所以我用我的手機怎麼找也找到不已經上架的軟體，最後用別人的Moto一下就找到了，害我搞了半天，想說怎麼看不到。&lt;br /&gt;
&lt;br /&gt;
最後要說一下放到Market上的感想，就是那麼大片的軟體海，你的App怎麼也很難被找到，行銷及曝光就很重要啦，當個獨立的App開發者，真的是不能只會一項技能。&lt;br /&gt;
&lt;br /&gt;
我的App名稱：&lt;a href="https://market.android.com/details?id=com.tonycube.app.movietime&amp;amp;feature=search_result"&gt;電影時刻 MovieTime&lt;/a&gt; (連結到Market)&lt;br /&gt;
&lt;br /&gt;
&lt;img alt="qrcode" src="http://qrcode.kaywa.com/img.php?s=6&amp;amp;d=goo.gl%2FDa8Pw" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-443579218459315972?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/z2uQIrrCZRKCRGupp43PQkdLb0M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z2uQIrrCZRKCRGupp43PQkdLb0M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/z2uQIrrCZRKCRGupp43PQkdLb0M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/z2uQIrrCZRKCRGupp43PQkdLb0M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/l05uPMjSlKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/443579218459315972/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/10/app.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/443579218459315972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/443579218459315972?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/l05uPMjSlKo/app.html" title="開發心得：查看電影資訊及時刻表的App" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Kxwff5ozQuw/TphkQKkq1BI/AAAAAAAABVc/k3gnoB-X4qU/s72-c/movietime.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/10/app.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQEQXYzfSp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-2795698401680537851</id><published>2011-10-04T18:12:00.001+08:00</published><updated>2011-10-04T18:15:00.885+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T18:15:00.885+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>解決ListView捲動時背景變黑的狀況</title><content type="html">&lt;div class="img-caption" style="width: 265px;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-tL_0PmphsIA/TorbqjUroII/AAAAAAAABVY/jPJMQnDujgI/s320/listviewdemo.png" width="255" /&gt; ListView Scroll Demo&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
發生的情況在於將ListView放置在LinearLayout中(或其他類似情況)，LinearLayout有設定背景顏色(非黑色)或圖片，當ListView在做捲動的動作時，會短暫變成黑底，LinearLayout中設定的顏色或圖片會看不到，直到ListView的捲動停止時，才會又恢復。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
解決方法很簡單，只要把ListView的 cacheColorHint 屬性設為 #00000000 即可，用意在於設定為透明色，如此就解決捲動時變黑底的狀況。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  &lt;span style="color: red;"&gt;android:background="@drawable/background"&lt;/span&gt;&amp;gt;
  &amp;lt;ListView
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    &lt;span style="color: red;"&gt;android:cacheColorHint="#00000000"&lt;/span&gt;
    android:id="@+id/listAll"&amp;gt;
  &amp;lt;/ListView&amp;gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/pre&gt;&lt;br /&gt;
大概的界面設定會是這樣，LinearLayout設定背景，ListView把cacheColorHint設為透明，就這樣。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-2795698401680537851?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IV84D8vUPjZc2hIMP0cUx0ZC5vM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IV84D8vUPjZc2hIMP0cUx0ZC5vM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IV84D8vUPjZc2hIMP0cUx0ZC5vM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IV84D8vUPjZc2hIMP0cUx0ZC5vM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/WUX_Ge2R5eI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/2795698401680537851/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/10/listview.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2795698401680537851?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2795698401680537851?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/WUX_Ge2R5eI/listview.html" title="解決ListView捲動時背景變黑的狀況" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-tL_0PmphsIA/TorbqjUroII/AAAAAAAABVY/jPJMQnDujgI/s72-c/listviewdemo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/10/listview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08ER3o6fCp7ImA9WhdUEUk.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-5634268672836563960</id><published>2011-09-28T00:37:00.003+08:00</published><updated>2011-09-28T00:43:26.414+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T00:43:26.414+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><title>一個計算程式碼執行時間的小工具</title><content type="html">&lt;div class="img-caption" style="width: 321px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-OqXGJAlJlQY/ToH62EgOU8I/AAAAAAAABVU/bJp_tbXOO1s/s1600/processtime.png" /&gt; Photo by &lt;a href="http://www.opticallyyours.com/servlet/the-4/HOT-NEW-ITEM%21-LOW/Detail"&gt;opticallyyours.com&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
最近在寫的一個程式，有個功能必須從網路下載資料，然後解析網頁去取得值，由於執行時間有點久，所以想要知道到底是哪個環節耗了那麼多時間。問題是每次開發都要寫重覆的程式碼實在很浪費時間，所以就花了點時間寫個小工具，順便練習一下Google Code及git的使用。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;要計算程式的執行時間很簡單，在執行前後取得系統時間，做相減的動作就是了。這應該算是我的第一個open source的專案，就當是個開始吧！&lt;br /&gt;
&lt;br /&gt;
小工具的Google Code在&lt;a href="http://code.google.com/p/processtimehelper/"&gt;這裡(processtimehelper)&lt;/a&gt;。使用方式很簡單。&lt;br /&gt;
&lt;br /&gt;
在每次計算時間前，先clear時間：&lt;br /&gt;
&lt;pre&gt;ProcessTimeHelper.clear();&lt;/pre&gt;之後在每個要計算執行時間的程式碼前後加上start及end：&lt;br /&gt;
&lt;pre&gt;ProcessTimeHelper.start();
&lt;span style="color: #cc0000;"&gt;//要執行的程式碼&lt;/span&gt;
ProcessTimeHelper.end();
//接下來取得這次的執行時間(單位為ms)
long t = ProcessTimeHelper.getProcessTime();
//你也可以直接在console顯示
ProcessTimeHelper.displayProcessTime();&lt;/pre&gt;&lt;br /&gt;
如果你要取得多個程式碼的總執行時間，請重覆以上的部份。若沒有，則在下次使用前請先clear時間。平均時間及總時間的取得如下：&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;ProcessTimeHelper.getTotalTime();
//或直接顯示全部時間(sec.)
ProcessTimeHelper.displayTotalTime();
//也可以取得平均時間(ms)
ProcessTimeHelper.getAverageTime();
//或直接顯示平均時間(sec.)
ProcessTimeHelper.displayAverageTime();&lt;/pre&gt;&lt;br /&gt;
這就是全部功能啦~~直接下載jar檔加入專案就能用了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-5634268672836563960?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-cPBVdYdOrm-tnuJXD-l0SyvN7A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-cPBVdYdOrm-tnuJXD-l0SyvN7A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-cPBVdYdOrm-tnuJXD-l0SyvN7A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-cPBVdYdOrm-tnuJXD-l0SyvN7A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/QdFCbOQdINY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/5634268672836563960/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/blog-post.html#comment-form" title="1 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5634268672836563960?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5634268672836563960?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/QdFCbOQdINY/blog-post.html" title="一個計算程式碼執行時間的小工具" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-OqXGJAlJlQY/ToH62EgOU8I/AAAAAAAABVU/bJp_tbXOO1s/s72-c/processtime.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IDQnc8fSp7ImA9WhdVFkw.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-46903437672500381</id><published>2011-09-21T22:29:00.004+08:00</published><updated>2011-09-21T22:32:53.975+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-21T22:32:53.975+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>加速模擬器(Speed up Emulator)</title><content type="html">&lt;div class="img-caption" style="width: 260px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-FmSu406qz_c/Tnnz7OUza0I/AAAAAAAABU0/SIeq8R4LFmU/s1600/avd.png" /&gt;Photo by &lt;a href="http://www.masternewmedia.org/how-to-make-your-website-faster-part-1-best-tutorials-and-tools/"&gt;masternewmedia.org&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;加速！加速！&lt;/h2&gt;根據湯姆就是瑪莉(Time is Money~~冷)法則，時間總是保貴的，每次執行程式時的等待時間加起來，可是很驚人的，加快模擬器的執行速度變得很必要，前提是電腦的CPU要夠快，記憶體要夠大，以下的設定才能發揮功效。&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
加快模擬器速度分為兩個部份，首先是「首次開啟模擬器的時間」，這通常只會做一次，因為在開發期間，模擬器是可以不用關閉的。每次執行程式時，只會做程式的Install到模擬器的動作。另外則是「模擬器執行程式的時間」，有部份決定於CPU的速度，因為模擬器是CPU在執行的，如果CPU太慢，那這部份是無解的，這裡讓模擬器執行程式速度變快的方法，只是把模擬器可用的記憶體加大而已。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;1. 加快開啟速度&lt;/h2&gt;這個方法是對模擬器做快照(snapshot)，所以在關閉時會稍慢，可能會出現無回應的狀況，請讓它跑完，因為它正在做快照。如下圖一，點選AVD Manager圖示後會開啟管理視窗，如果還沒有AVD，必須先「New...」一個，若已有則先選取AVD後「Edit...」。&lt;br /&gt;
&lt;br /&gt;
圖一&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-U1WvzteldeE/TnnwBKRCKUI/AAAAAAAABUk/_5ZEJlZMqnQ/s1600/avd-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" src="http://3.bp.blogspot.com/-U1WvzteldeE/TnnwBKRCKUI/AAAAAAAABUk/_5ZEJlZMqnQ/s400/avd-1.png" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
點選「Edit...」後會開啟編輯視窗，如下圖二，請把Snapshot的Enable打勾。按下「Edit AVD」儲存設定。&lt;br /&gt;
&lt;br /&gt;
圖二&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-YPvovBSXws8/TnnwCeAhLLI/AAAAAAAABUs/R9f5vBvlSzo/s1600/avd-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-YPvovBSXws8/TnnwCeAhLLI/AAAAAAAABUs/R9f5vBvlSzo/s320/avd-3.png" width="232" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
接著點選圖一中的「Start...」會開啟Launch Options視窗，如下圖三。請把Launch from snapshot 及 Save to snapshot打勾，整個步驟就完成了。點選「Launch」啟動模擬器。第一次開啟模擬器是一樣的速度，但因為之後會存下這次模擬器的快照，所以下次再開啟時，就會很快。&lt;br /&gt;
&lt;br /&gt;
圖三&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://2.bp.blogspot.com/-B4nVfw7KR9I/TnnwB-I6wRI/AAAAAAAABUo/2gSq0sg0ms0/s1600/avd-2.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. 加快執行速度&lt;/h2&gt;還是再說一次，執行速度一部份取決於CPU，另一部份則是記憶體，這個部驟只是把記憶體加大而已，並不能把CPU加快。若你的CPU太慢，就不需做了，沒太大用處；若記憶體小於2G，也不建議使用。&lt;br /&gt;
&lt;br /&gt;
首先進入AVD的編輯視窗，如圖二，在Hardware這一欄，選擇右邊的「New...」在Property選項中選擇Device ram size，確定後回到圖二。將Hardware新增加的Device ram size屬性的Value設為768或1024(依自己需求)，此即為要給模擬器用的記憶大小(預設為256)。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3. 命令列參數&lt;/h2&gt;另外還有一個方法可以讓模擬器快一點。如下圖四，執行「Run」&amp;gt; 「Run Configurations...」打開執行設定視窗，選到「Target」標籤，在最下面「Additional Emulator Command Line Option」輸入-scale 0.5 -no-boot-anim，此-scale 0.5 會讓模擬器以原尺寸的50%顯示，在開發平板或其他高解析度裝置的程式時很好用，降低顯示的效能損耗。-no-boot-anim則是在開啟模擬器時，不顯示開頭動畫，減少執行時間。勾選「Disable Boot Animation」是一樣的作用。&lt;br /&gt;
&lt;br /&gt;
圖四&lt;br /&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-WgCAZRxn9M0/TnnwC1zv0jI/AAAAAAAABUw/SUspT0wvOrI/s1600/avd-4.png" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-46903437672500381?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3nmeUTIdv6hmSW_mm7rkC-pKonw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nmeUTIdv6hmSW_mm7rkC-pKonw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3nmeUTIdv6hmSW_mm7rkC-pKonw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3nmeUTIdv6hmSW_mm7rkC-pKonw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/uthSiFZ51WU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/46903437672500381/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/speed-up-android-emulator.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/46903437672500381?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/46903437672500381?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/uthSiFZ51WU/speed-up-android-emulator.html" title="加速模擬器(Speed up Emulator)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-FmSu406qz_c/Tnnz7OUza0I/AAAAAAAABU0/SIeq8R4LFmU/s72-c/avd.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/speed-up-android-emulator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMGQHg4eyp7ImA9WhdVEEw.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-7605411592133160067</id><published>2011-09-14T23:30:00.005+08:00</published><updated>2011-09-14T23:33:41.633+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T23:33:41.633+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="windows" /><title>Windows 8 Developer Preview試用小心得</title><content type="html">&lt;div class="img-caption" style="width: 330px;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-JfJovTvzu0Q/TnDDuOoZdhI/AAAAAAAABTA/VWc3L-M4s2E/s320/00.PNG" width="320" /&gt;&lt;p&gt;Windows 8 Preview&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
我太笨了，不會用Windows 8。&lt;br /&gt;
一個3.6G的檔案安裝完會有20G，嚇鼠人~~~&lt;br /&gt;
&lt;br /&gt;
操作心得：點選Start時，會跳到方格界面，下面有捲軸讓你左右移，選點Desktop會回到一般的視窗界面。檔案總管變得和Office一樣上面有眼花瞭亂的功能讓你選。滑鼠移到最左下角會出現「秘技」選單(我試了好久才確定是移到左下角)，要關機就要選秘技的setting，右邊才會出現關機選項，我找了好久不知道怎麼關機~~~XD&lt;br /&gt;
&lt;br /&gt;
以下是安裝步驟的截圖(on Virtualbox)&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-10Ezk4HiEZ8/TnDDt1WhYuI/AAAAAAAABS4/p0NSN96KU34/s1600/01.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-10Ezk4HiEZ8/TnDDt1WhYuI/AAAAAAAABS4/p0NSN96KU34/s320/01.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Sg4lhVBoyp4/TnDDt3qKxvI/AAAAAAAABS8/6gD6ECGfPeo/s1600/02.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="239" src="http://1.bp.blogspot.com/-Sg4lhVBoyp4/TnDDt3qKxvI/AAAAAAAABS8/6gD6ECGfPeo/s320/02.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0UVQNcljZKQ/TnDDuaHwbtI/AAAAAAAABTE/7DjiZFnq5Lw/s1600/03.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://2.bp.blogspot.com/-0UVQNcljZKQ/TnDDuaHwbtI/AAAAAAAABTE/7DjiZFnq5Lw/s320/03.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-wWo8yS62dZk/TnDDuljfMbI/AAAAAAAABTI/byttdYI5MRM/s1600/04.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://2.bp.blogspot.com/-wWo8yS62dZk/TnDDuljfMbI/AAAAAAAABTI/byttdYI5MRM/s320/04.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-QslU6zNvWk0/TnDDu0hSONI/AAAAAAAABTM/kOaQAnkjNAw/s1600/05.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-QslU6zNvWk0/TnDDu0hSONI/AAAAAAAABTM/kOaQAnkjNAw/s320/05.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-sdloObSlGrM/TnDDu17DUNI/AAAAAAAABTQ/87eRNLFJsio/s1600/06.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-sdloObSlGrM/TnDDu17DUNI/AAAAAAAABTQ/87eRNLFJsio/s320/06.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9IDaacNQC-E/TnDDvMITsHI/AAAAAAAABTU/kZfgHMmP72E/s1600/07.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-9IDaacNQC-E/TnDDvMITsHI/AAAAAAAABTU/kZfgHMmP72E/s320/07.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-CSDiTU_54lc/TnDDvfuC9wI/AAAAAAAABTY/FuD2Ew3jznQ/s1600/08.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-CSDiTU_54lc/TnDDvfuC9wI/AAAAAAAABTY/FuD2Ew3jznQ/s320/08.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-EVMh0-h6qO4/TnDDvijzrpI/AAAAAAAABTc/jfrJ-i8suj8/s1600/09.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-EVMh0-h6qO4/TnDDvijzrpI/AAAAAAAABTc/jfrJ-i8suj8/s320/09.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-bIP5DYt6TGI/TnDDvjWYJ1I/AAAAAAAABTg/RdBgt2BNCSI/s1600/10.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-bIP5DYt6TGI/TnDDvjWYJ1I/AAAAAAAABTg/RdBgt2BNCSI/s320/10.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-YrHRNnuDD7U/TnDDwCpm9YI/AAAAAAAABTk/GMPh6ow_BmQ/s1600/11.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-YrHRNnuDD7U/TnDDwCpm9YI/AAAAAAAABTk/GMPh6ow_BmQ/s320/11.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-L-i4TBcIGCc/TnDDwmnJP8I/AAAAAAAABTo/Iw8ype5oQ5E/s1600/12.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-L-i4TBcIGCc/TnDDwmnJP8I/AAAAAAAABTo/Iw8ype5oQ5E/s320/12.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-UxgpCLhJNJw/TnDDxP3WYnI/AAAAAAAABTw/03-HbRke2Xw/s1600/13.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://1.bp.blogspot.com/-UxgpCLhJNJw/TnDDxP3WYnI/AAAAAAAABTw/03-HbRke2Xw/s320/13.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-EtTxoVuvdSI/TnDDxGYnv4I/AAAAAAAABTs/_66QNqvS1Tw/s1600/14.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-EtTxoVuvdSI/TnDDxGYnv4I/AAAAAAAABTs/_66QNqvS1Tw/s320/14.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oyNbUg7A2vE/TnDDxb0_XFI/AAAAAAAABT4/MJ93_b5OIiM/s1600/15.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://3.bp.blogspot.com/-oyNbUg7A2vE/TnDDxb0_XFI/AAAAAAAABT4/MJ93_b5OIiM/s320/15.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-TFPztQLiU7I/TnDDxoaB7SI/AAAAAAAABT0/LD97tUQDwWY/s1600/16.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-TFPztQLiU7I/TnDDxoaB7SI/AAAAAAAABT0/LD97tUQDwWY/s320/16.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kBmmlfc0U_E/TnDDyv8AtVI/AAAAAAAABUA/f377nzlN50Q/s1600/17.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://4.bp.blogspot.com/-kBmmlfc0U_E/TnDDyv8AtVI/AAAAAAAABUA/f377nzlN50Q/s320/17.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-P_zgcgJQnrs/TnDDyu7YFCI/AAAAAAAABT8/MOI-KwOi87E/s1600/18.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="267" src="http://2.bp.blogspot.com/-P_zgcgJQnrs/TnDDyu7YFCI/AAAAAAAABT8/MOI-KwOi87E/s320/18.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-7605411592133160067?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qCeEJC4LdTs_OW9feWsRoiDCfCY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qCeEJC4LdTs_OW9feWsRoiDCfCY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qCeEJC4LdTs_OW9feWsRoiDCfCY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qCeEJC4LdTs_OW9feWsRoiDCfCY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/VBd1T2GJmOs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/7605411592133160067/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/windows-8-developer-preview.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7605411592133160067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/7605411592133160067?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/VBd1T2GJmOs/windows-8-developer-preview.html" title="Windows 8 Developer Preview試用小心得" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-JfJovTvzu0Q/TnDDuOoZdhI/AAAAAAAABTA/VWc3L-M4s2E/s72-c/00.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/windows-8-developer-preview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGQHY8eSp7ImA9WhdWGE4.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-8335461966467137136</id><published>2011-09-12T22:14:00.008+08:00</published><updated>2011-09-12T22:28:41.871+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-12T22:28:41.871+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="VisualStudio" /><title>程式碼片段(Snippet code)</title><content type="html">&lt;div class="img-caption" style="width: 273px;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Pes_s3jm-6w/Tm4SsVWTupI/AAAAAAAABSw/lHrxn8qPfP4/s1600/snippet-2.png" width="263" /&gt;&lt;br /&gt;
Snippet Demo&lt;/div&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;1. 建立程式碼片段&lt;/h2&gt;在Visual Studio中，可以將經常重覆寫的程式碼片段建立起來，利用IntelliSense功能減少重覆撰寫程式碼來增加開發的效率。程式碼片段是以XML格式撰寫，並儲存成 .snippet 副檔名的檔案。建立的步驟如下：&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;[檔案] -&amp;gt; [新增] -&amp;gt; [檔案] -&amp;gt; 選擇[XML] (如此會開啟一個尚未存檔的xml，檔名為XMLFile1.xml)&lt;/li&gt;
&lt;li&gt;[檔案] -&amp;gt; [另存XMLFile1.xml為...] -&amp;gt; 存檔類型請下拉選擇 [Snippet檔案 (*.snippet)] -&amp;gt; 輸入檔名&lt;/li&gt;
&lt;/ol&gt;接下來就可以編輯XML的內容來建立程式碼片段。MSDN上詳細的&lt;a href="http://msdn.microsoft.com/zh-tw/library/ms171418%28v=vs.80%29.aspx"&gt;程式碼片段結構描述參考&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. 基本的XML檔(C#)&lt;/h2&gt;&lt;pre&gt;&amp;lt;CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2010/CodeSnippet"&amp;gt;
  &amp;lt;CodeSnippet Format="1.0.0"&amp;gt;
    &amp;lt;Header&amp;gt;
      &lt;span style="color: red;"&gt;&amp;lt;Title&amp;gt;
        Snippet Demo
      &amp;lt;/Title&amp;gt;&lt;/span&gt;
    &amp;lt;/Header&amp;gt;
    &amp;lt;Snippet&amp;gt;
      &amp;lt;Code Language="CSharp"&amp;gt;
        &amp;lt;![CDATA[
        //程式碼片段      
        MessageBox.Show("Hello World~~");
        ]]&amp;gt;
      &amp;lt;/Code&amp;gt;
    &amp;lt;/Snippet&amp;gt;
  &amp;lt;/CodeSnippet&amp;gt;
&amp;lt;/CodeSnippets&amp;gt;&lt;/pre&gt;&lt;br /&gt;
Title標籤用來表示此程式碼片段的名稱。&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3. 使用 Snippet 檔&lt;/h2&gt;建立好的程式碼片段要怎麼用呢？步驟如下：&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;匯入 snippet&lt;br /&gt;
[工具] -&amp;gt; [程式碼片段管理員] -&amp;gt; 選擇語言(C#) -&amp;gt; [匯入] -&amp;gt; 選擇你建立的 snippet 檔 -&amp;gt; 選擇你要存放的位置 -&amp;gt; 確定&lt;/li&gt;
&lt;li&gt;使用(在程式碼*.cs檔中使用)&lt;br /&gt;
[編輯] -&amp;gt; [插入程式碼片段] (快速鍵為 Ctrl + K, X) -&amp;gt; 選擇你要插入的程式碼目錄(取決於你剛才匯入時存放的位置) -&amp;gt; 撰擇程式碼片段(即Title名稱)&lt;/li&gt;
&lt;/ol&gt;Tips：建議儲存的目錄及片段都以英文命名，如此在選擇程式碼片段時可以完全不用動到滑鼠或切換輸入法。&lt;br /&gt;
&lt;br /&gt;
以下圖為例的鍵盤操作：Ctrl + K, X -&amp;gt; M [Tab] -&amp;gt; S [Tab]&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" height="51" src="http://2.bp.blogspot.com/-BgmoTCUjfa8/Tm4Sr0m9HqI/AAAAAAAABSs/i7EZ5Hva1OE/s320/snippet-1.png" width="320" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;4. 更多的Snippet XML設定&lt;/h2&gt;&lt;br /&gt;
程式碼片段還可以做到預先設定要修改的位置，然後利用Tab鍵來移動到要修改的位置上，讓寫程式碼更快速。例如當你輸入for，然後按兩次Tab鍵，你會看到for迴圈的骨架全部出現，變數的部份則反白，然後就可利用Tab鍵來跳到下一個反白的位置修改。這裡就是要說這個，下面是增加這個功能後的XML：&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;
&amp;lt;CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2010/CodeSnippet"&amp;gt;
  &amp;lt;CodeSnippet Format="1.0.0"&amp;gt;
    &amp;lt;Header&amp;gt;
      &amp;lt;Title&amp;gt;
        Snippet Demo
      &amp;lt;/Title&amp;gt;
    &amp;lt;/Header&amp;gt;
    &amp;lt;Snippet&amp;gt;
      &lt;span style="color: red;"&gt;&amp;lt;Declarations&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;        &amp;lt;Literal&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;          &amp;lt;ID&amp;gt;MSG&amp;lt;/ID&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;Default&amp;gt;Hello World!&amp;lt;/Default&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;          &amp;lt;ToolTip&amp;gt;要顯示的訊息內容&amp;lt;/ToolTip&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;        &amp;lt;/Literal&amp;gt;&lt;/span&gt;
&lt;span style="color: red;"&gt;      &amp;lt;/Declarations&amp;gt;&lt;/span&gt;
      &amp;lt;Code Language="CSharp"&amp;gt;
        &amp;lt;![CDATA[
        //程式碼片段
        MessageBox.Show("&lt;span style="color: red;"&gt;$MSG$&lt;/span&gt;");

        ]]&amp;gt;
      &amp;lt;/Code&amp;gt;
    &amp;lt;/Snippet&amp;gt;
  &amp;lt;/CodeSnippet&amp;gt;
&amp;lt;/CodeSnippets&amp;gt;&lt;/pre&gt;&lt;br /&gt;
標籤說明：&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/zh-tw/library/ms171424%28v=vs.80%29.aspx"&gt;Declarations&lt;/a&gt;：指定可以編輯的程式碼片段中所含的常值 (Literal) 和物件。子項目為Literal及Object。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn.microsoft.com/zh-tw/library/ms171435%28v=vs.80%29.aspx"&gt;Literal&lt;/a&gt;：定義常值。子項目為&lt;br /&gt;
ID(必要)：識別用。&lt;br /&gt;
Default(必要)：預設值。預先填充在可修改的位置。&lt;br /&gt;
ToolTip(非必要)：提示文字。滑鼠停留在反白區(Default文字)時顯示的提示文字。&lt;/li&gt;
&lt;/ul&gt;在CDATA中的程式碼，使用 &lt;span style="color: red;"&gt;$ID名稱$&lt;/span&gt; 的方式來代表這個ID的Default要出現的位置。&lt;br /&gt;
&lt;br /&gt;
完成後的使用結果如下圖：&lt;br /&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-Pes_s3jm-6w/Tm4SsVWTupI/AAAAAAAABSw/lHrxn8qPfP4/s1600/snippet-2.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
記得修改過的Snippet檔要重做第3點，重新匯入一次，才能正常使用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-8335461966467137136?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HLD0o66U8OgH8CaQ8l8LpmcxLeM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HLD0o66U8OgH8CaQ8l8LpmcxLeM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HLD0o66U8OgH8CaQ8l8LpmcxLeM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HLD0o66U8OgH8CaQ8l8LpmcxLeM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/rtmgggnsZxs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/8335461966467137136/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/visual-studiosnippet.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/8335461966467137136?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/8335461966467137136?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/rtmgggnsZxs/visual-studiosnippet.html" title="程式碼片段(Snippet code)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-Pes_s3jm-6w/Tm4SsVWTupI/AAAAAAAABSw/lHrxn8qPfP4/s72-c/snippet-2.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/visual-studiosnippet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEMQ3w5cSp7ImA9WhdWF0w.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-6059714579877744769</id><published>2011-09-11T13:00:00.004+08:00</published><updated>2011-09-11T13:08:02.229+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-11T13:08:02.229+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Textbox的自動完成 (AutoComplete)</title><content type="html">&lt;div class="img-caption" style="width: 310px;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-cjDoVX0U1BA/Tmw_TEyDY7I/AAAAAAAABSo/VyR_-sLc2GQ/s1600/autocomplete-3.png" /&gt; AutoComplete Demo&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;1. Textbox的屬性設定&lt;/h2&gt;要讓Textbox有自動完成的功能，必須指定&lt;a href="http://msdn.microsoft.com/zh-tw/library/system.windows.forms.textbox.autocompletesource.aspx"&gt;AutoCompleteSource屬性&lt;/a&gt;，預設為None，也就是不使用，總共有7種來源可選。如果資料來源要由自己提供，例如從資料庫取得的資料，就必須指定為CustomSource。&lt;br /&gt;
&lt;br /&gt;
並且同時要指定&lt;a href="http://msdn.microsoft.com/zh-tw/library/system.windows.forms.textbox.autocompletemode.aspx"&gt;AutoCompleteMode屬性&lt;/a&gt;，這是自動完成的表現方式，預設為None，表示沒有任何形式的提示，也就是自動完成有動作，但沒告知使用者，看起來沒有任何自動完成的效果。可用的屬性稍後介紹。&lt;br /&gt;
&lt;br /&gt;
最後只要告訴Textbox可用的資料有哪些，就可讓它幫你達成自動完成的動作。把資料設定在&lt;a href="http://msdn.microsoft.com/zh-tw/library/system.windows.forms.textbox.autocompletecustomsource%28v=vs.80%29.aspx"&gt;AutoCompleteCustomSource屬性&lt;/a&gt;，依照指示一筆資料一行。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. AutoCompleteMode屬性&lt;/h2&gt;可用的屬性有3種：&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Suggest：只提供建議。文字框下會列出可選的資料，但不會自動幫你填在文字框中。如下圖。&lt;br /&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-o9u0Ri0Z3Wc/Tmw_SRPQ6RI/AAAAAAAABSc/6WzfdSpN3n4/s1600/autocomplete-1.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Append：直接附加可用的資料。不會提供建議的資料清單，當你輸入第一個字元時，自動幫你把找到相符的第一筆資料附加在你輸入的字元之後，並反白顯示，當你輸入第2個字元時，繼續幫你找到相符的資料做附加，持續下去。如下圖1為輸入第1個字元時的提示資料，圖2為輸入第2個字元時提示的資料。&lt;br /&gt;
&lt;br /&gt;
圖1&lt;br /&gt;
&lt;img border="0" src="http://1.bp.blogspot.com/-c1Hdl_Q-d7s/Tmw_SrBqu0I/AAAAAAAABSg/BIotjoEoBsE/s1600/autocomplete-2-1.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
圖2&lt;br /&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-03xQ541b_r4/Tmw_SwJ0x7I/AAAAAAAABSk/I9Zbj2IfO4w/s1600/autocomplete-2-2.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;SuggestAppend：綜合以上2種效果，既顯示資料清單也自動幫你附加第一筆文字。&lt;br /&gt;
&lt;img border="0" src="http://4.bp.blogspot.com/-cjDoVX0U1BA/Tmw_TEyDY7I/AAAAAAAABSo/VyR_-sLc2GQ/s1600/autocomplete-3.png" /&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;3. 以程式碼方式達成&lt;/h2&gt;以上的說明，全都在設計階段就可完成。當然也可以程式碼方式來達到同樣效果，如果資料必須從資料庫載入的話也是必須這麼做。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;private void initAutoCompleteTextBox()
 {
     AutoCompleteStringCollection autoData = new AutoCompleteStringCollection();
     autoData.Add("Apple");
     autoData.Add("Banana");
     autoData.Add("Blackberry");
     autoData.Add("Blueberry");
     autoData.Add("Lemon");
     autoData.Add("Mango");
     autoData.Add("Orange");
     autoData.Add("Pineapple");
     autoData.Add("Strawberry");

     txtAuto.AutoCompleteSource = AutoCompleteSource.CustomSource;
     txtAuto.AutoCompleteMode = AutoCompleteMode.Suggest;
     txtAuto.AutoCompleteCustomSource = autoData;
 }&lt;/pre&gt;&lt;br /&gt;
資料使用&lt;a href="http://msdn.microsoft.com/zh-tw/library/system.windows.forms.autocompletestringcollection.aspx"&gt;AutoCompleteStringCollection類別&lt;/a&gt;來加入，之後再指定給Textbox就可以了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-6059714579877744769?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O06-Ayouq3C6bEWhdaH52HPv5tY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O06-Ayouq3C6bEWhdaH52HPv5tY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O06-Ayouq3C6bEWhdaH52HPv5tY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O06-Ayouq3C6bEWhdaH52HPv5tY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/TuicUCoYy98" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/6059714579877744769/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/textbox.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6059714579877744769?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6059714579877744769?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/TuicUCoYy98/textbox.html" title="Textbox的自動完成 (AutoComplete)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-cjDoVX0U1BA/Tmw_TEyDY7I/AAAAAAAABSo/VyR_-sLc2GQ/s72-c/autocomplete-3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/textbox.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8EQng5eCp7ImA9WhdWF0w.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-3029347531168611361</id><published>2011-09-10T15:44:00.002+08:00</published><updated>2011-09-11T11:46:43.620+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-11T11:46:43.620+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>指定ComboBox的項目值(ComboBox item value)</title><content type="html">&lt;div class="img-caption" style="width: 328px;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-SdwFoVbMazU/TmsUFbactVI/AAAAAAAABSU/4CgarANwIRA/s1600/combobox-2.PNG" width="318" /&gt; ComboBox Demo(C#)&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt; &lt;a name='more'&gt;&lt;/a&gt;1. 基本使用&lt;/h2&gt;ComboBox的基本使用方式很簡單，在屬性的Items欄位先設定要顯示的選項。在取得使用者選擇哪個選項時，只要從ComboBox的Text屬性即可得知。&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" height="273" src="http://3.bp.blogspot.com/-rrQ5AP-2IgU/TmsUFFX2sUI/AAAAAAAABSQ/UB9yXRERfg0/s320/combobox-1.PNG" width="320" /&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;  2. 指定項目的值&lt;/h2&gt;但有時候我們除了想要知道選取的項目外，還想要知道該項目的值。例如，如果從資料庫拉資料進ComboBox，我們想要同時把一筆資料的ID同時指定給該項目，以利於做其他判斷。這時候就必須讓ComboBox同時可以設定"項目名稱"及"值"。 &lt;br /&gt;
&lt;br /&gt;
我們必須利用ComboBox的DataSource屬性，把資料以Key-Value的方式指定給該屬性當作資料來源。接著設定DisplayMember屬性為"Key"，ValueMember屬性為"Value"。在取得使用者選擇哪個項目的值時，使用SelectValue屬性。  設定ComboBox的資料： &lt;br /&gt;
&lt;pre&gt;private void initCbxCity()
{
   ArrayList data = new ArrayList();
   data.Add(new DictionaryEntry("台北", 1));
   data.Add(new DictionaryEntry("台中", 2));
   data.Add(new DictionaryEntry("台南", 3));
   data.Add(new DictionaryEntry("高雄", 4));
   cbxCity.&lt;span style="color: red;"&gt;DisplayMember&lt;/span&gt; = "Key";
   cbxCity.&lt;span style="color: red;"&gt;ValueMember&lt;/span&gt; = "Value";
   cbxCity.&lt;span style="color: red;"&gt;DataSource&lt;/span&gt; = data;
}&lt;/pre&gt;取得項目名稱及值： &lt;br /&gt;
&lt;pre&gt;MessageBox.Show( cbxCity.Text + " (" + cbxCity.&lt;span style="color: red;"&gt;SelectedValue&lt;/span&gt; + ")");&lt;/pre&gt;結果就如下圖：&lt;br /&gt;
&lt;br /&gt;
&lt;img border="0" src="http://3.bp.blogspot.com/-HhMmODQscbY/TmsUFhqPN2I/AAAAAAAABSY/74j5cTaBMf0/s1600/combobox-3.PNG" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-3029347531168611361?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/x8sa8WUlQ-dfkI2yThu0P-jtJJE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x8sa8WUlQ-dfkI2yThu0P-jtJJE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/x8sa8WUlQ-dfkI2yThu0P-jtJJE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/x8sa8WUlQ-dfkI2yThu0P-jtJJE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/AJxSAESTqYI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/3029347531168611361/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/09/comboboxcombobox-item-value.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/3029347531168611361?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/3029347531168611361?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/AJxSAESTqYI/comboboxcombobox-item-value.html" title="指定ComboBox的項目值(ComboBox item value)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-SdwFoVbMazU/TmsUFbactVI/AAAAAAAABSU/4CgarANwIRA/s72-c/combobox-2.PNG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/09/comboboxcombobox-item-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGRnwyfyp7ImA9WhdXF08.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-1842262732728779772</id><published>2011-08-31T00:23:00.003+08:00</published><updated>2011-08-31T00:28:47.297+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T00:28:47.297+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>ProgressDialog的使用</title><content type="html">&lt;div class="img-caption" style="width: 303px;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-OTBSOtAwWfo/Tl0Nmat16lI/AAAAAAAABSE/ZoPVhHPV0pQ/s1600/progressdialog_demo.png" width="293" /&gt;&lt;br /&gt;
ProgressDialog Demo&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;1. 使用說明&lt;/h2&gt;&lt;br /&gt;
ProgressDialog就是會跳出一個告訴你要稍等一下的對話框，期間不能做其他事，必須等待程序執行完畢後才能動作。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
(1) 使用方式很簡單，先建立ProgressDialog物件&lt;br /&gt;
&lt;pre&gt;ProgressDialog psDialog;&lt;/pre&gt;(2) 接著在要進入長時間程式碼之前呼叫&lt;br /&gt;
&lt;pre&gt;psDialog = ProgressDialog.show(this, "訊息", "資料載入中，請稍候...");&lt;/pre&gt;(3) 在長時間程式碼執行完成後釋放&lt;br /&gt;
&lt;pre&gt;psDialog.dismiss();&lt;/pre&gt;更詳細的資料請看&lt;a href="http://developer.android.com/reference/android/app/ProgressDialog.html"&gt;ProgressDialog&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. 範例程式碼&lt;/h2&gt;&lt;br /&gt;
我在另外一篇文章介紹&lt;a href="http://tonycube.blogspot.com/2011/08/asynctask.html"&gt;AsyncTask背景執行&lt;/a&gt;的程式碼剛好可以利用，加上PregressDialog的完整程式碼如下：&lt;br /&gt;
&lt;pre&gt;public class AsyncTaskDemo extends Activity {

	private TextView txtResult;
	&lt;strong style="background-color: #ffe599;"&gt;private ProgressDialog psDialog;&lt;/strong&gt;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.asynctask);
	}

	@Override
	protected void onStart() {
		super.onStart();

		txtResult = (TextView) findViewById(R.id.txtTaskResult);
		txtResult.setText("Loading......");

		&lt;strong style="background-color: #ffe599;"&gt;psDialog = ProgressDialog.show(this, "訊息", "資料載入中，請稍候...");&lt;/strong&gt;
		new LoadingDataAsyncTask().execute(null);
	}

	private void getData(){
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

	private void showData(){
		txtResult.setText("資料載入完畢!!");
		&lt;strong style="background-color: #ffe599;"&gt;psDialog.dismiss();&lt;/strong&gt;
	}

	class LoadingDataAsyncTask extends AsyncTask&amp;lt;String, Integer, Integer&amp;gt;{

		@Override
		protected Integer doInBackground(String... param) {
			getData();
			return null;
		}

		@Override
		protected void onPostExecute(Integer result) {
			super.onPostExecute(result);
			showData();
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
		}

	}
}&lt;/pre&gt;&lt;br /&gt;
劃線部份為這個範例加上去的，其他都和&lt;a href="http://tonycube.blogspot.com/2011/08/asynctask.html"&gt;AsyncTask Demo&lt;/a&gt;時的一樣。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-1842262732728779772?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ohPdcUlMp-LeNTMyAVrdqX38S_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ohPdcUlMp-LeNTMyAVrdqX38S_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ohPdcUlMp-LeNTMyAVrdqX38S_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ohPdcUlMp-LeNTMyAVrdqX38S_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/lYEVHRIj-zo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/1842262732728779772/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/08/progressdialog.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1842262732728779772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/1842262732728779772?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/lYEVHRIj-zo/progressdialog.html" title="ProgressDialog的使用" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-OTBSOtAwWfo/Tl0Nmat16lI/AAAAAAAABSE/ZoPVhHPV0pQ/s72-c/progressdialog_demo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/08/progressdialog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04BQnc4cSp7ImA9WhdXF08.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-6012429783023635220</id><published>2011-08-30T23:56:00.014+08:00</published><updated>2011-08-31T00:32:33.939+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-31T00:32:33.939+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>使用AsyncTask執行非同步任務</title><content type="html">&lt;div class="img-caption" style="width: 330px;"&gt;&lt;img border="0" height="281" src="http://4.bp.blogspot.com/-E4UqN_KGOtM/Tl0H37uTaUI/AAAAAAAABSA/hc97bxGeUPg/s320/asynctask_demo.png" width="320" /&gt;&lt;br /&gt;
AsyncTask Demo&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;1. 背景執行&lt;/h2&gt;要做到背景執行，可以使用Service、Thread及AsyncTask這3種類別。Service可以向系統註冊，長期在背景執行。而Thread則可自己建立執行緒，配合Handler類別來和GUI執行緒同步，偏向什麼都自己來。AsyncTask類別則幫我們做了很多事，我們要做的只是告訴AsyncTask什麼內容要在背景執行，執行完後要做什麼事之類的指定，算是比較簡單方便可以在背景執行達到非同步任務的方法。&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;h2&gt;2. 繼承AsyncTask類別&lt;/h2&gt;要做用AsyncTask的第一步就是建立一個繼承AsyncTask的類別，然後覆寫需要的方法，如下：&lt;br /&gt;
&lt;pre&gt;@Override
protected void onStart() {
	super.onStart();

	txtResult = (TextView) findViewById(R.id.txtTaskResult);
	txtResult.setText("Loading......");

	&lt;strong&gt;&lt;span style="color: red;"&gt;new LoadingDataAsyncTask().execute(null);&lt;/span&gt;&lt;/strong&gt;
}

private void getData(){
	try {
		&lt;strong style="background-color: #ffe599;"&gt;Thread.sleep(3000);&lt;/strong&gt;
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
}

private void showData(){
	txtResult.setText("資料載入完畢!!");
}

class LoadingDataAsyncTask &lt;strong&gt;&lt;span style="color: red;"&gt;extends AsyncTask&amp;lt;String, Integer, Integer&amp;gt;&lt;/span&gt;&lt;/strong&gt;{

	@Override
	protected Integer &lt;strong style="background-color: #ffe599;"&gt;doInBackground&lt;/strong&gt;(String... param) {
		getData();
		return null;
	}

	@Override
	protected void &lt;strong style="background-color: #ffe599;"&gt;onPostExecute&lt;/strong&gt;(Integer result) {
		super.onPostExecute(result);
		showData();
	}

	@Override
	protected void &lt;strong style="background-color: #ffe599;"&gt;onProgressUpdate&lt;/strong&gt;(Integer... values) {
		super.onProgressUpdate(values);
	}

	@Override
	protected void &lt;strong style="background-color: #ffe599;"&gt;onPreExecute&lt;/strong&gt;() {
		super.onPreExecute();
	}

}&lt;/pre&gt;&lt;br /&gt;
LoadingDataAsyncTask類別是內部類別，寫在Activity之內，所以getData()及showData()方法可以直接呼叫。&lt;br /&gt;
&lt;br /&gt;
要執行AsyncTask很容易，建立物件(new)後，執行execute(null)方法即可，可以傳參數進去，若不用則給null。execute()方法不能重覆呼叫，在結束之前又呼叫一次的話會發生錯誤。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3. AsyncTask類別的方法說明&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;doInBackground方法&lt;br /&gt;
這是一定必須覆寫的方法，把會花時間執行的內容放在這裡，例如這裡的getData()會是一個需要花時間執行的方法，我們就把它放到背景去執行。這裡我簡單用Thread.sleep(3000)，讓它「睡」3秒鐘，模擬這部份的內容花了3秒才做完。&lt;br /&gt;
*重要：這裡不能和UI有任何互動。&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;onPostExecute方法&lt;br /&gt;
當doInBackground方法中的程式執行完畢後，就會執行這個方法。通常是用來把取得的資料送給UI來顯示。在doInBackground方法中是不能和任何UI元件互動的，只能在背景執行完畢後在這裡把資料送給UI。&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;onProgressUpdate方法&lt;br /&gt;
這個方法會取得一個數值，可以用來計算目前執行的進度，通常用來改變進度列(ProgressBar)的顯示。&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;onPreExecute方法&lt;br /&gt;
在背景執行之前要做什麼事都是寫在這裡。&lt;/li&gt;
&lt;/ul&gt;詳細資料可以參考&lt;a href="http://developer.android.com/reference/android/os/AsyncTask.html"&gt;AsyncTask類別&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
此外，當執行這個範例時，你會發現程式看起來像是當掉，沒有任何反應，這是因為它正在背景執行，若沒有任何回饋訊息給使用者知道，會以為當掉了。在另外一篇文章介紹的&lt;a href="http://tonycube.blogspot.com/2011/08/progressdialog.html"&gt;ProgressDialog Demo&lt;/a&gt;可以跳出一個等待訊息對話框，告訴使用者稍等一下。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-6012429783023635220?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LMcQqeGRAQ9OOoobAz_s2sGFmag/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LMcQqeGRAQ9OOoobAz_s2sGFmag/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LMcQqeGRAQ9OOoobAz_s2sGFmag/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LMcQqeGRAQ9OOoobAz_s2sGFmag/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/GMEg7L4Iack" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/6012429783023635220/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/08/asynctask.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6012429783023635220?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6012429783023635220?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/GMEg7L4Iack/asynctask.html" title="使用AsyncTask執行非同步任務" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-E4UqN_KGOtM/Tl0H37uTaUI/AAAAAAAABSA/hc97bxGeUPg/s72-c/asynctask_demo.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/08/asynctask.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAFRXg9eSp7ImA9WhdXFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-2626958469718484020</id><published>2011-08-29T21:15:00.009+08:00</published><updated>2011-08-30T11:58:34.661+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-30T11:58:34.661+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>利用res value的xml建立key-value</title><content type="html">&lt;div class="img-caption" style="width: 330px;"&gt;&lt;img border="0" height="219" src="http://3.bp.blogspot.com/-qXOWB3nUKDA/TluQk9bA3aI/AAAAAAAABRc/aTW9SAbWscY/s320/key-value.png" width="320" /&gt;&lt;br /&gt;
Photo by&amp;nbsp;&lt;a href="http://codeasp.net/articles/2"&gt;codeasp&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;1. 建立陣列&lt;/h2&gt;有時候會需要一組key-value的固定資料，但不想寫死在程式碼中，而想利用資源中的xml來建立，不只容易修改，在做多國語言時也可以方便使用。&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
在res/values目錄中建立一個資源xml檔，同時建立兩個互相對映的字串及數值陣列，如下：&lt;br /&gt;
&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;resources&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;string-array name="area_key"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;台北&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;台中&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;台南&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;高雄&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;宜蘭&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;花蓮&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/string-array&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;integer-array name="area_value"&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;0&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;3&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;4&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item&amp;gt;5&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/integer-array&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. 程式碼(*.java)&lt;/h2&gt;&lt;code&gt;String[] areaKey = getResources().getStringArray(R.array.area_key);&lt;br /&gt;
int[] areaValue = getResources().getIntArray(R.array.area_value);	&lt;br /&gt;
&lt;br /&gt;
HashMap&amp;lt;String, Integer&amp;gt; areas = new HashMap&amp;lt;String, Integer&amp;gt;();&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;lt; areaKey.length; i++) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;areas.put(areaKey[i], areaValue[i]);&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
這樣就把資源中xml的資料以Map的型態建立，之後就可以在程式碼中來利用。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-2626958469718484020?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4tlcG6vreIK6JjWZmmWa9sS63oE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tlcG6vreIK6JjWZmmWa9sS63oE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4tlcG6vreIK6JjWZmmWa9sS63oE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4tlcG6vreIK6JjWZmmWa9sS63oE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/waWdxo6o-18" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/2626958469718484020/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/08/res-valuexmlkey-value.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2626958469718484020?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/2626958469718484020?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/waWdxo6o-18/res-valuexmlkey-value.html" title="利用res value的xml建立key-value" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-qXOWB3nUKDA/TluQk9bA3aI/AAAAAAAABRc/aTW9SAbWscY/s72-c/key-value.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/08/res-valuexmlkey-value.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ABRXY9fSp7ImA9WhdXFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-5962873895150432210</id><published>2011-08-29T20:59:00.005+08:00</published><updated>2011-08-30T11:42:34.865+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-30T11:42:34.865+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>TextView Marquee 跑馬燈文字</title><content type="html">&lt;div class="img-caption" style="width: 357px;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-MLfEa49zg1E/TluM2Sp0rMI/AAAAAAAABRY/fFp1ifbpq4I/s1600/marquee.png" /&gt;&lt;br /&gt;
TextView Marquee Demo&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;1. 設定TextView&lt;/h2&gt;當你想要TextView以一行的方式來顯示文字，可是有的文字太長無法全部顯示，這時可以指定TextView的相關屬性讓過長的文字以跑馬燈的方式顯示。&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;code&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout&lt;br /&gt;
  xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;
  android:orientation="vertical"&lt;br /&gt;
  android:layout_width="match_parent"&lt;br /&gt;
  android:layout_height="match_parent"&amp;gt;&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
      android:textAppearance="?android:attr/textAppearanceLarge"&lt;br /&gt;
      android:layout_height="wrap_content"&lt;br /&gt;
      android:layout_width="wrap_content"&lt;br /&gt;
      android:id="@+id/txtMarquee"&lt;br /&gt;
      android:text="這是文字過長跑馬燈測試，看到請回答，OVER~~"&lt;br /&gt;
      android:textSize="30sp"&lt;br /&gt;
      &lt;strong&gt;android:marqueeRepeatLimit="-1"&lt;/strong&gt;&lt;br /&gt;
      &lt;strong&gt;android:ellipsize="marquee"&lt;/strong&gt;&lt;br /&gt;
      &lt;strong&gt;android:singleLine="true"&lt;/strong&gt;&lt;br /&gt;
      android:padding="5sp"&lt;br /&gt;
      &lt;strong&gt;android:focusableInTouchMode="true"&lt;/strong&gt;&lt;br /&gt;
      &lt;strong&gt;android:focusable="true"&lt;/strong&gt; /&amp;gt;&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. 屬性說明&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;android:marqueeRepeatLimit="-1"&lt;br /&gt;
跑馬燈的循環次數，-1表示無限循環。&lt;/li&gt;
&lt;li&gt;android:singleLine="true"&lt;br /&gt;
指定TextView以單行顯示。&lt;/li&gt;
&lt;li&gt;android:focusableInTouchMode="true"&lt;br /&gt;
指定在觸控模式下取得焦點，連同下一個focusable都必須設為true，跑馬燈才會動。&lt;/li&gt;
&lt;li&gt;android:focusable="true"&lt;br /&gt;
讓TextView可以取得焦點。&lt;/li&gt;
&lt;li&gt;android:ellipsize="marquee"&lt;br /&gt;
過長文字的省略方式，共有5種。&lt;br /&gt;
none：不作用。形同end。&lt;br /&gt;
start：省略開頭文字，注重顯示尾端文字。&lt;br /&gt;
middle：省略中間文字，前後文字中間以...呈現。&lt;br /&gt;
end：省略尾端文字。&lt;br /&gt;
marquee：跑馬燈模式。&lt;/li&gt;
&lt;/ul&gt;在程式碼裡不需再做其他設定。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-5962873895150432210?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V1js194PDvK3Fn7lRNhKarRutv8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V1js194PDvK3Fn7lRNhKarRutv8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V1js194PDvK3Fn7lRNhKarRutv8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V1js194PDvK3Fn7lRNhKarRutv8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/COikPDIfV3c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/5962873895150432210/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/08/textview-marquee.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5962873895150432210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/5962873895150432210?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/COikPDIfV3c/textview-marquee.html" title="TextView Marquee 跑馬燈文字" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-MLfEa49zg1E/TluM2Sp0rMI/AAAAAAAABRY/fFp1ifbpq4I/s72-c/marquee.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/08/textview-marquee.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFRnszcSp7ImA9WhdXFko.&quot;"><id>tag:blogger.com,1999:blog-380186287506750332.post-6606332789959328554</id><published>2011-08-19T23:02:00.006+08:00</published><updated>2011-08-30T11:46:57.589+08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-30T11:46:57.589+08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>自訂標題列樣式(customize titlebar)</title><content type="html">&lt;div class="img-caption" style="width: 223px;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-iEnVSSJY3gw/Tk5vGEhXP5I/AAAAAAAABQc/JtV5__0o4vI/s320/titlebar_demo_3.png" width="213" /&gt;&lt;br /&gt;
Customize Titlebar&lt;/div&gt;&lt;br /&gt;
&lt;h2&gt;&amp;nbsp;1. Titlebar Layout&lt;/h2&gt;當開發一款App時，Android原生的視窗標題列樣式常和App的風格不合，這時可以自訂標題列的樣式讓它符合App的風格。首先要設計一個標題列的layout內容如下：&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
titlebar.xml&lt;br /&gt;
&lt;code&gt;&amp;lt;LinearLayout&lt;br /&gt;
  xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;
  android:orientation="vertical"&lt;br /&gt;
  android:layout_width="match_parent"&lt;br /&gt;
  android:layout_height="match_parent"&lt;br /&gt;
  android:background="#6699ff"&amp;gt;&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
       android:text="@string/app_name"&lt;br /&gt;
       android:layout_width="wrap_content"&lt;br /&gt;
       android:layout_height="wrap_content"&lt;br /&gt;
       android:textColor="#000000"&lt;br /&gt;
       android:textSize="20sp"&amp;gt;&amp;lt;/TextView&amp;gt;&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;2. Activity&lt;/h2&gt;titlebar.xml只是用來設定標題列的layout，所以仍會有原本呈現內容的layout，例如main.xml。接著在Activity中指定標題列用我們設計的layout來呈現，程式碼如下：&lt;br /&gt;
&lt;br /&gt;
TitlebarDemo.java&lt;br /&gt;
&lt;code&gt;@Override&lt;br /&gt;
protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
	super.onCreate(savedInstanceState);&lt;br /&gt;
	&lt;b&gt;requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);&lt;/b&gt;&lt;br /&gt;
        setContentView(R.layout.main);&lt;br /&gt;
        &lt;b&gt;getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, &lt;span style="color: #cc0000;"&gt;R.layout.titlebar&lt;/span&gt;);&lt;/b&gt;&lt;br /&gt;
}&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
R.layout.titlebar就是指定步驟1所設計的標題列layout。&lt;br /&gt;
&lt;br /&gt;
這時候發佈的話，看起來會像下圖這樣，似乎只是在原標題列上放上自訂的標題，怪怪的，也不能調整高度，所以要改用樣式的方式來指定。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/-8EMXv6cgxfc/Tk5vFTCGRlI/AAAAAAAABQU/HBiBGIJwdp8/s1600/titlebar_demo_1.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-8EMXv6cgxfc/Tk5vFTCGRlI/AAAAAAAABQU/HBiBGIJwdp8/s320/titlebar_demo_1.png" width="213" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;3. 自訂style&lt;/h2&gt;為Activiey設計一個theme，叫做titlebar_style.xml&lt;br /&gt;
&lt;code&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;
    &amp;lt;style name="TitleBar"&amp;gt;&lt;br /&gt;
        &amp;lt;item name="android:background"&amp;gt;#6699ff&amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;item name="android:orientation"&amp;gt;horizontal&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
    &amp;lt;style name="TitleBarTheme" parent="android:Theme"&amp;gt;&lt;br /&gt;
    	&amp;lt;item name="android:windowTitleSize"&amp;gt;40dip&amp;lt;/item&amp;gt;&lt;br /&gt;
        &amp;lt;item name="android:windowTitleBackgroundStyle"&amp;gt;@style/TitleBar&amp;lt;/item&amp;gt;&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/resources&amp;gt;&lt;/code&gt;&lt;br /&gt;
要知道還有哪些屬性可用，可以在&lt;a href="http://developer.android.com/reference/android/R.attr.html" target="_blank" title="R.attr"&gt;R.attr&lt;/a&gt;中查到。例如，如果要指定一個沒有標題的視窗，可以用&lt;a href="http://developer.android.com/reference/android/R.attr.html" target="_blank"&gt;android.windowNoTitle&lt;/a&gt;屬性，並設值為true即可，但要記得把Activity中的那段指定titlebar的程式碼拿掉才能正常執行。&lt;br /&gt;
&lt;br /&gt;
現在有了theme後還不能執行，要把這theme指定給Activity使用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;4. 設定AndroidManifest.xml&lt;/h2&gt;在AndroidManifest.xml中找到要自訂標題列的Activity，加上theme的屬性。&lt;br /&gt;
&lt;code&gt;&amp;lt;activity android:name="TitlebarDemo" &lt;span style="color: red;"&gt;&lt;b&gt;android:theme="@style/TitleBarTheme"&lt;/b&gt;&lt;/span&gt;&amp;gt;&lt;/code&gt;&lt;br /&gt;
到這裡就完成了。結果就像下面的截圖。&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-wapqNrOlVrU/Tk5vF8ExjEI/AAAAAAAABQY/5p38bAWWdZI/s1600/titlebar_demo_2.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-wapqNrOlVrU/Tk5vF8ExjEI/AAAAAAAABQY/5p38bAWWdZI/s320/titlebar_demo_2.png" width="213" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;5. 美化調整&lt;/h2&gt;當然這樣並不好看，所以可以用圖片來代替單調的文字，準備好適當的圖片後，把原titlebar.xml中的TextView刪掉換成ImageView，並用RelativeLayout來讓圖片置中。&lt;br /&gt;
&lt;br /&gt;
titlebar.xml修改如下：&lt;br /&gt;
&lt;code&gt;&amp;lt;RelativeLayout&lt;br /&gt;
  xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;
  android:layout_width="match_parent"&lt;br /&gt;
  android:layout_height="match_parent"&lt;br /&gt;
  android:background="#6699ff"&lt;br /&gt;
  android:orientation="horizontal" android:paddingLeft="5dip"&amp;gt;&lt;br /&gt;
    &amp;lt;ImageView&lt;br /&gt;
    	android:layout_height="wrap_content"&lt;br /&gt;
    	android:src="@drawable/android321"&lt;br /&gt;
    	android:id="@+id/imgLogo"&lt;br /&gt;
    	android:layout_width="wrap_content"&lt;br /&gt;
    	android:layout_centerVertical="true"&lt;br /&gt;
    	&amp;gt;&amp;lt;/ImageView&amp;gt;&lt;br /&gt;
&amp;lt;/RelativeLayout&amp;gt;&lt;/code&gt;&lt;br /&gt;
android321是放在/drawable中的圖檔android321.png，記得檔名一律為小寫。&lt;br /&gt;
&lt;br /&gt;
完成後就會像文章一開始的截圖啦。&lt;br /&gt;
&lt;br /&gt;
自訂標題列的layout後，意謂著可以在標題列中加入其他的元件來提供使用者資訊，例如可以加入一個處理進度的圖示，告知使用者處理進度等等。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/380186287506750332-6606332789959328554?l=tonycube.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sQJZ8rd3E7nBbWS4jrQ_FdpLcDA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sQJZ8rd3E7nBbWS4jrQ_FdpLcDA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sQJZ8rd3E7nBbWS4jrQ_FdpLcDA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sQJZ8rd3E7nBbWS4jrQ_FdpLcDA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/YJzd/~4/3ahZCAcFwrE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://tonycube.blogspot.com/feeds/6606332789959328554/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://tonycube.blogspot.com/2011/08/customize-titlebar.html#comment-form" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6606332789959328554?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/380186287506750332/posts/default/6606332789959328554?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/YJzd/~3/3ahZCAcFwrE/customize-titlebar.html" title="自訂標題列樣式(customize titlebar)" /><author><name>Tony</name><uri>http://www.blogger.com/profile/06921175936597485631</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://2.bp.blogspot.com/-31Fadm-n2bM/TWJ73_vqGeI/AAAAAAAAA8g/gXhsZ3rkLDQ/s220/AndroidMe.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-iEnVSSJY3gw/Tk5vGEhXP5I/AAAAAAAABQc/JtV5__0o4vI/s72-c/titlebar_demo_3.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://tonycube.blogspot.com/2011/08/customize-titlebar.html</feedburner:origLink></entry></feed>

