<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1255559226214186422</id><updated>2025-11-16T23:07:56.942+08:00</updated><category term="Android"/><category term="Native app"/><category term="app"/><category term="Image"/><category term="Mobile app"/><category term="Google API"/><category term="spinner"/><category term="sqlite"/><category term="google calendar api"/><category term="2D"/><category term="ASP.net"/><category term="Adapter"/><category term="Cocos Creator"/><category term="phoneGap"/><category term="AlertDialog"/><category term="JQuery Mobile"/><category term="ListView"/><category term="Micro Frontends"/><category term="VB.net"/><category term="camera"/><category term="toast"/><category term="前端開發"/><category term="微前端"/><category term="AR"/><category term="ArrayAdapter"/><category term="C#"/><category term="DisplayMetrics"/><category term="Font"/><category term="Google Maps API"/><category term="Google Play"/><category term="ImageButton"/><category term="Micro-App"/><category term="PDF"/><category term="TypeScript"/><category term="YouTube"/><category term="augmented reality"/><category term="facebook"/><category term="google"/><category term="intent"/><category term="menu"/><category term="metaio SDK"/><category term="工具"/><category term="擴增實境"/><category term="環境設定"/><category term="程式碼片段"/><category term="遊戲開發"/><title type='text'>吉姆愛開發</title><subtitle type='html'>專長開發、興趣學習，相信知識來自於分享。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>68</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-169829547013504973</id><published>2025-03-29T00:00:00.003+08:00</published><updated>2025-03-29T00:00:00.115+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2D"/><category scheme="http://www.blogger.com/atom/ns#" term="Cocos Creator"/><category scheme="http://www.blogger.com/atom/ns#" term="TypeScript"/><title type='text'>Cocos Creator 2D實戰(二) - Hello World</title><content type='html'>&lt;h1 style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Cocos Creator 2D實戰(二)&lt;/h1&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;Hello World&lt;/h2&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;每個程式開發的開始都是從Hello World開始的，當然我也不免淑的來個Hello World。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-weight: 400; text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitBHG2Zr7iK2q8h08kOllA1aTt0ulrwklr9c-YxZmuMKukNCNAf-N92Gl4WQUlwvr_fRt0oURCzDxuaYfDHKGAdFJ_jiOC0KkQhRg_HjrA-gV22ALzcAOyPiuG-08Bti0OI2WVSRDEPCTUkg9V7r7TpruvhHBe6eIMRtWg65uEK34tdBlkWtmTZ-rUBRw/s1204/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20134551.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;766&quot; data-original-width=&quot;1204&quot; height=&quot;408&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitBHG2Zr7iK2q8h08kOllA1aTt0ulrwklr9c-YxZmuMKukNCNAf-N92Gl4WQUlwvr_fRt0oURCzDxuaYfDHKGAdFJ_jiOC0KkQhRg_HjrA-gV22ALzcAOyPiuG-08Bti0OI2WVSRDEPCTUkg9V7r7TpruvhHBe6eIMRtWg65uEK34tdBlkWtmTZ-rUBRw/w640-h408/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20134551.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;選擇Hello TypeScript --&amp;gt; 定個項目名稱&quot;CocosCreator2D&quot; --&amp;gt; 選擇存放的位置 --&amp;gt; 創建。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkj7r8k87dvakvl0s-Yf6eh4XxX0DDvU1FmcvaAW6d9N99E_UIs14w1Ow_axhJRriE8x0I0PwEgXeS6R8nCh67L4hTs05wLtxXZtoberLozGheAF__pimFJBHMyoc0MkLLsN-UFy02sNpf079ZNVyI5IXr7z05vN6wch2zM4-piARNKmRCw7iUElPtEY/s1189/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20134750.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;756&quot; data-original-width=&quot;1189&quot; height=&quot;406&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkj7r8k87dvakvl0s-Yf6eh4XxX0DDvU1FmcvaAW6d9N99E_UIs14w1Ow_axhJRriE8x0I0PwEgXeS6R8nCh67L4hTs05wLtxXZtoberLozGheAF__pimFJBHMyoc0MkLLsN-UFy02sNpf079ZNVyI5IXr7z05vN6wch2zM4-piARNKmRCw7iUElPtEY/w640-h406/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20134750.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;會看到基本的架構&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8IlEZQMb2l9k0LgSberIWAv0l495o_SCrtG7f9RubOwwSEkqqb81i_TXKMjrIvZWBmS24crZglpcJvmZFAaib-bxPMwBjs3taoZh_hXXKq6ATYnwzYlePUDsUf4KJOCDuOUmB6sf7Zo0u05vjvSqtYNHAwVcdCUn-U-3M7uJNDQS3dN1eU99DAIV1PZk/s1276/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20135449.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1157&quot; data-original-width=&quot;1276&quot; height=&quot;580&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8IlEZQMb2l9k0LgSberIWAv0l495o_SCrtG7f9RubOwwSEkqqb81i_TXKMjrIvZWBmS24crZglpcJvmZFAaib-bxPMwBjs3taoZh_hXXKq6ATYnwzYlePUDsUf4KJOCDuOUmB6sf7Zo0u05vjvSqtYNHAwVcdCUn-U-3M7uJNDQS3dN1eU99DAIV1PZk/w640-h580/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20135449.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;比較重要的是左下方的檔案存放區，設好分類，把不同的檔案放在相對應的資料夾內，這樣之後專案變大之後才比較容易找到分辦所以尋找的檔案在何處。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;接下來設定畫布的大小，畫布的大小就等於您整個遊戲的畫面大小，如果是網頁遊戲都是以16 * 9或是4*3為主，比如說：1024 * 768。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCFGnAUgXedwSct8VeKt6KzwcT27Zbp092vA5FurCslNuY_HRMCDMnmBpwy8BKTFPgjSEx8MBIRs7Mjm5-9_fprODA-H0l_RKyh0IxqA_14UcSkuPR8W0wor03Q7eUqdIleX4PNiUrr6MuBaZD3jFI8zEqEKGSPaEUW-6atSll5j8zD32GSP8OpUsDDMs/s1268/cats.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;706&quot; data-original-width=&quot;1268&quot; height=&quot;356&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCFGnAUgXedwSct8VeKt6KzwcT27Zbp092vA5FurCslNuY_HRMCDMnmBpwy8BKTFPgjSEx8MBIRs7Mjm5-9_fprODA-H0l_RKyh0IxqA_14UcSkuPR8W0wor03Q7eUqdIleX4PNiUrr6MuBaZD3jFI8zEqEKGSPaEUW-6atSll5j8zD32GSP8OpUsDDMs/w640-h356/cats.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;一個場景裡面包含畫布、鏡頭、父節點、子節點、圖片、文字，任何的東西都會是一個節點，節點有上下層關係(父子關係)，也就是圖層的前後層關係，誰在誰前面，後面的圖層就會被前面的圖層蓋到(這個後面會說)。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikEN59LiDpBL2H2JjIMxh6iMdn8aVZS_fZqjDZ1HT1BKl9DmOnmbBwL8rFalTmiA-3i0fXtPq0wRH4pmI666il2IG9ACJuK17YpZYC_rgrEEQhKK0P5P5koLTDH3_dXdPP-2RZM5EoK0JvgPyrZIv9IrjsAUG1sciyn5c3-ugNKXXnlOH2tWnZK2cW3BY/s1272/cats1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;947&quot; data-original-width=&quot;1272&quot; height=&quot;476&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikEN59LiDpBL2H2JjIMxh6iMdn8aVZS_fZqjDZ1HT1BKl9DmOnmbBwL8rFalTmiA-3i0fXtPq0wRH4pmI666il2IG9ACJuK17YpZYC_rgrEEQhKK0P5P5koLTDH3_dXdPP-2RZM5EoK0JvgPyrZIv9IrjsAUG1sciyn5c3-ugNKXXnlOH2tWnZK2cW3BY/w640-h476/cats1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;從圖片裡面可以看到，任何的元件都會有一個Node(節點)，用來代表這個圖片或是文字，也代表這個圖片或是文字的相關位置、大小、角度、透明度，這些在Node裡面都有相關的屬性。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUKXehaiIlz0sF7yHvZI_aA3mld2NZ50ckRpbenyIKFGHY2gM9hCl7jDnIw2ap80vK7umfK-m4A2sTRP0kMp9Hx0psCbBuxg1RCGfvPsreDvY9imMMqEN9E1AIlpsA1zs4xjM4zyGnHuE5fxAsUrw8iZ8r_vxNisREt0xuSuAY6xheoFIAtqFhQwiFHqI/s2533/cats2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1140&quot; data-original-width=&quot;2533&quot; height=&quot;288&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUKXehaiIlz0sF7yHvZI_aA3mld2NZ50ckRpbenyIKFGHY2gM9hCl7jDnIw2ap80vK7umfK-m4A2sTRP0kMp9Hx0psCbBuxg1RCGfvPsreDvY9imMMqEN9E1AIlpsA1zs4xjM4zyGnHuE5fxAsUrw8iZ8r_vxNisREt0xuSuAY6xheoFIAtqFhQwiFHqI/w640-h288/cats2.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;由於我們已經設定好了相關的環境設定，所以點擊腳本兩下會自動開始VS Code，打開TypsScript到該腳本的位置，這就是我們要寫程式碼的地方，這樣就能控制該物件了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;以上就有個初步的認識cocos creator 2D的基本架構和內容會有哪些相關的東西了，下一步我們來實做一個Loading畫面，這個在很多遊戲裡面都還蠻常用的，因為遊戲在剛開始起步時，會需要加載很多東西(圖片、文字、聲音)，這個也需要一點時間，所以就有了Loading的必要性了下一篇我們就來實做這個部份，感謝。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/169829547013504973/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-2d-hello-world.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/169829547013504973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/169829547013504973'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-2d-hello-world.html' title='Cocos Creator 2D實戰(二) - Hello World'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitBHG2Zr7iK2q8h08kOllA1aTt0ulrwklr9c-YxZmuMKukNCNAf-N92Gl4WQUlwvr_fRt0oURCzDxuaYfDHKGAdFJ_jiOC0KkQhRg_HjrA-gV22ALzcAOyPiuG-08Bti0OI2WVSRDEPCTUkg9V7r7TpruvhHBe6eIMRtWg65uEK34tdBlkWtmTZ-rUBRw/s72-w640-h408-c/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-23%20134551.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>台灣</georss:featurename><georss:point>23.69781 120.960515</georss:point><georss:box>-4.612423836178845 85.804265 52.008043836178842 156.116765</georss:box></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-208539968136002444</id><published>2025-03-23T00:00:00.009+08:00</published><updated>2025-03-23T13:41:49.478+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2D"/><category scheme="http://www.blogger.com/atom/ns#" term="Cocos Creator"/><category scheme="http://www.blogger.com/atom/ns#" term="環境設定"/><title type='text'>Cocos Creator 2D實戰(一) - 環境設定</title><content type='html'>&lt;h1 style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Cocos Creator 2D實戰(一)&lt;/h1&gt;&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: 400; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;環境設定&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-weight: 400; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;第二步先做環境設定：&lt;a href=&quot;https://docs.cocos.com/creator/2.4/manual/zh/getting-started/coding-setup.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;環境設定&lt;/a&gt;、&lt;a href=&quot;https://code.visualstudio.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;VS Code&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh9norMeZruqg-H8g3ZneUHe8g20kHOOHxW2kD-QOh8VD9urtLuchxMEOIkovfPwM-3qFBgXUZRfYVrV6rqlGBcxu25J7yIQTv9uvPIljaF-MSEWVf5G_cBAKK83zpS7xOkegvY7iCXz44h3iWwkvrHhoYXDcnp0_vHY_oqDXD-fIBzoTNHVKEL5R6Rdo/s1395/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20111735.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;911&quot; data-original-width=&quot;1395&quot; height=&quot;385&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh9norMeZruqg-H8g3ZneUHe8g20kHOOHxW2kD-QOh8VD9urtLuchxMEOIkovfPwM-3qFBgXUZRfYVrV6rqlGBcxu25J7yIQTv9uvPIljaF-MSEWVf5G_cBAKK83zpS7xOkegvY7iCXz44h3iWwkvrHhoYXDcnp0_vHY_oqDXD-fIBzoTNHVKEL5R6Rdo/w588-h385/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20111735.png&quot; width=&quot;588&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;正常來說跟著做就可以完成環境設定了，由於是開發2D，所以右上角先選擇2.4版(目前最高版本)會比較好，比較不容易錯亂，畢竟3.x和2.x的差異很大。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UMXB8SkDlYUA1PgaPyyZGjKiL6CxIXKWsN9Pc31WFNQbkjjRKNZgW_Ay0OfmN7nTMH5NPRw3sIcG8bu0uPtu5nrWA5j3I3AI3Sr2Ky-jYNUvHX_v3ZGg8k3uSRwBc08OiPe4QYETN0h_szMgWEmhyphenhyphen_7Ku0GQct6-R0VywNduti4bXc-9QefQZiGiOUY/s1435/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20111429.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;484&quot; data-original-width=&quot;1435&quot; height=&quot;225&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9UMXB8SkDlYUA1PgaPyyZGjKiL6CxIXKWsN9Pc31WFNQbkjjRKNZgW_Ay0OfmN7nTMH5NPRw3sIcG8bu0uPtu5nrWA5j3I3AI3Sr2Ky-jYNUvHX_v3ZGg8k3uSRwBc08OiPe4QYETN0h_szMgWEmhyphenhyphen_7Ku0GQct6-R0VywNduti4bXc-9QefQZiGiOUY/w664-h225/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20111429.png&quot; width=&quot;664&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;介面軟體是Cocos Dashboard，但程式碼的IDE是VS Code，預覽瀏覽器Chrome，所以做完環境設定就能連結好&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Cocos Dashboard、VS Code、Chrome，就可以準備好開發2D遊戲了。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/208539968136002444/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-2.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/208539968136002444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/208539968136002444'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-2.html' title='Cocos Creator 2D實戰(一) - 環境設定'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh9norMeZruqg-H8g3ZneUHe8g20kHOOHxW2kD-QOh8VD9urtLuchxMEOIkovfPwM-3qFBgXUZRfYVrV6rqlGBcxu25J7yIQTv9uvPIljaF-MSEWVf5G_cBAKK83zpS7xOkegvY7iCXz44h3iWwkvrHhoYXDcnp0_vHY_oqDXD-fIBzoTNHVKEL5R6Rdo/s72-w588-h385-c/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20111735.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>台灣</georss:featurename><georss:point>23.69781 120.960515</georss:point><georss:box>-4.612423836178845 85.804265 52.008043836178842 156.116765</georss:box></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-1160252589257435128</id><published>2025-03-22T00:00:00.010+08:00</published><updated>2025-03-22T00:00:00.118+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="2D"/><category scheme="http://www.blogger.com/atom/ns#" term="Cocos Creator"/><category scheme="http://www.blogger.com/atom/ns#" term="遊戲開發"/><title type='text'>Cocos Creator 2D實戰</title><content type='html'>&lt;h1 style=&quot;text-align: center;&quot;&gt;Cocos Creator 實戰&lt;/h1&gt;&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;font-size: medium;&quot;&gt;Cocos Creator是個用來開發2D或是3D遊戲的整合開發環境(IDE)，程式語言是使用Javascript或TypeScript，Unity是用C#，但如果是Cocos Creator 3D的話是只能用TypeScript，所以建議還是用TypeScript比較統一。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;a href=&quot;https://www.cocos.com/information#CocosCreator&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Cocos Creator官方網站&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;第一步當然是下載編輯軟體：&lt;a href=&quot;https://www.cocos.com/creator-download&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;軟體下載&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;安裝完成後會出現&quot;Cocos Dashboard&quot;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYexJT9aQ71JOFY8SgJ7CXRbq5vAb_eafBBbGLxBpSRd4s5tEZhl2bhRkelRNNfKbg5VpPFAuBP-nCAnXnsS11oAbObrbd6vOP93chNaA_sMd1Cj8tJWvPy7MakYQx3i7zar9nZOrEnUD5N3oW4Vwg5Yy4RXqAGSYtLsPTISQ_awO701lwZEmCoJbj_XY/s89/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20113156.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;89&quot; data-original-width=&quot;68&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYexJT9aQ71JOFY8SgJ7CXRbq5vAb_eafBBbGLxBpSRd4s5tEZhl2bhRkelRNNfKbg5VpPFAuBP-nCAnXnsS11oAbObrbd6vOP93chNaA_sMd1Cj8tJWvPy7MakYQx3i7zar9nZOrEnUD5N3oW4Vwg5Yy4RXqAGSYtLsPTISQ_awO701lwZEmCoJbj_XY/s16000/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20113156.png&quot; /&gt;&lt;/a&gt;，點擊二下開啟&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;必須先按裝版本編輯器：&lt;br /&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;選擇左側&quot;安裝&quot;&lt;/li&gt;&lt;li&gt;點擊右上角&quot;安裝編輯器&quot;&lt;/li&gt;&lt;li&gt;安裝最新版本，我目前的2D版本是2.4.13，2開頭就是專門用來開發2D的，3D請選擇3開頭的。&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPdBtkPk2RAqwIg4LqjMIe-TIpUPMYvOB_iIXJtYBy9ikizq1Zx7c4EI0fb7K9da98ydFafBzEFcoTghUigOV8pGcgTJoA7HIjr_TzBss3CPZQsLXlVJm5DP9MVcD_GG5p3X8UJWrAPLUPUVEJqGZm1eCUxzg69UEsnuuKzV2OouC-AaTkB8BcYFFl_E/s1179/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20113519.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;720&quot; data-original-width=&quot;1179&quot; height=&quot;390&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipPdBtkPk2RAqwIg4LqjMIe-TIpUPMYvOB_iIXJtYBy9ikizq1Zx7c4EI0fb7K9da98ydFafBzEFcoTghUigOV8pGcgTJoA7HIjr_TzBss3CPZQsLXlVJm5DP9MVcD_GG5p3X8UJWrAPLUPUVEJqGZm1eCUxzg69UEsnuuKzV2OouC-AaTkB8BcYFFl_E/w640-h390/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20113519.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;為什麼需要先安裝編輯器呢？因為專案是需要指定是用哪個版本的，所以最好是先安裝編輯器。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiISamaOkBIL__4eEEark8wV-n-iHxiaUKUFmkzgGCSxQYl2CwfH5VCsz_r5Hed4y6BmMj6og4z0g5t-aoXweZmpAfHFLQmtfRE3Et5I0u5kRJe7Ib54pl-5d9e9OiKNqgivyvKkf2pyUnEdS1XgzYiuAb8uh735E0wCFsa0U4XEUq8Nqb19oRUmAYrOk/s1170/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20114201.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;689&quot; data-original-width=&quot;1170&quot; height=&quot;376&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiISamaOkBIL__4eEEark8wV-n-iHxiaUKUFmkzgGCSxQYl2CwfH5VCsz_r5Hed4y6BmMj6og4z0g5t-aoXweZmpAfHFLQmtfRE3Et5I0u5kRJe7Ib54pl-5d9e9OiKNqgivyvKkf2pyUnEdS1XgzYiuAb8uh735E0wCFsa0U4XEUq8Nqb19oRUmAYrOk/w640-h376/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20114201.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;這樣初步的開發軟體就已經安裝好就定位了，下一篇來說說環境設定的部份，有問題歡迎留言給我，謝謝。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/1160252589257435128/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-1.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1160252589257435128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1160252589257435128'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2025/03/cocos-creator-1.html' title='Cocos Creator 2D實戰'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYexJT9aQ71JOFY8SgJ7CXRbq5vAb_eafBBbGLxBpSRd4s5tEZhl2bhRkelRNNfKbg5VpPFAuBP-nCAnXnsS11oAbObrbd6vOP93chNaA_sMd1Cj8tJWvPy7MakYQx3i7zar9nZOrEnUD5N3oW4Vwg5Yy4RXqAGSYtLsPTISQ_awO701lwZEmCoJbj_XY/s72-c/%E8%9E%A2%E5%B9%95%E6%93%B7%E5%8F%96%E7%95%AB%E9%9D%A2%202025-03-20%20113156.png" height="72" width="72"/><thr:total>0</thr:total><georss:featurename>台灣</georss:featurename><georss:point>23.69781 120.960515</georss:point><georss:box>-4.612423836178845 85.804265 52.008043836178842 156.116765</georss:box></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-166888671699776474</id><published>2025-01-18T20:00:00.001+08:00</published><updated>2025-01-18T20:00:00.251+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Micro Frontends"/><category scheme="http://www.blogger.com/atom/ns#" term="Micro-App"/><category scheme="http://www.blogger.com/atom/ns#" term="前端開發"/><category scheme="http://www.blogger.com/atom/ns#" term="微前端"/><title type='text'>Micro-Apps 實戰(一)</title><content type='html'>&lt;h1 style=&quot;text-align: center;&quot;&gt;&amp;nbsp;Micro-Apps 實戰(一)：簡介&lt;/h1&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h4 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;隨著現代應用程序的日益複雜以及用戶需求的不斷增加，開發和維護大型單體應用變得愈加困難。Micro-Apps (微應用) 概念因此應運而生，旨在通過將應用拆分為多個小型、獨立且可組合的應用來提高效率和靈活性。&lt;/span&gt;&lt;/h4&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Micro-Apps 的特點&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;高度獨立&lt;/strong&gt;：每個微應用擁有自己的數據和業務邏輯，運行於自己的上下文中。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;技術多樣性&lt;/strong&gt;：不同的微應用可以使用不同的技術棧，根據具體需求選擇最合適的技術。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;模塊化&lt;/strong&gt;：微應用之間通過明確的接口進行通信和集成，使得代碼重用和維護更加簡單。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;靈活部署&lt;/strong&gt;：可以獨立開發和部署每個微應用，從而提高發布速度和迭代效率。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;Micro-Apps 的優勢&lt;/h3&gt;&lt;ol start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;可維護性高&lt;/strong&gt;：通過拆分成多個小型應用，可以更容易地定位和修復問題。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;可擴展性強&lt;/strong&gt;：可以通過添加新微應用來擴展功能，而不會影響現有系統。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;快速交付&lt;/strong&gt;：開發團隊可以同時開發多個微應用，加快整體應用的交付速度。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;靈活性高&lt;/strong&gt;：不同的微應用可以根據需求進行獨立升級和部署，不受其他部分影響。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin2tdCzdGRkYtd7n6nxgeb-cVaEc2g8R97qX_DXb17-cIKdoOU4rC61q__tDvKNoWtHV_SLTfb81VTh7Y5GLHVslNBsHieqZJVnPq69-MN31K1BtpudhWa5NCYD0CNaN-KET_Yd1DtMPYAk2A74WPG150cGfAg8r5urVplEIQdyqwpyuZoi3wdLVo8cTQ/s2468/78b3cee6ce36845b.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1204&quot; data-original-width=&quot;2468&quot; height=&quot;346&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin2tdCzdGRkYtd7n6nxgeb-cVaEc2g8R97qX_DXb17-cIKdoOU4rC61q__tDvKNoWtHV_SLTfb81VTh7Y5GLHVslNBsHieqZJVnPq69-MN31K1BtpudhWa5NCYD0CNaN-KET_Yd1DtMPYAk2A74WPG150cGfAg8r5urVplEIQdyqwpyuZoi3wdLVo8cTQ/w710-h346/78b3cee6ce36845b.png&quot; width=&quot;710&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;圖片來源：https://jd-opensource.github.io/micro-app/docs.html#/&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;結語&lt;/h3&gt;&lt;p&gt;Micro-Apps 為現代應用開發提供了一種靈活、可擴展且高效的方法。通過拆分和模塊化，不僅可以提高應用的可維護性和可擴展性，還能提高開發和部署效率。這種架構理念給予了團隊更多的自由和靈活性，有助於應對更複雜的業務需求和快速變化的市場環境。&lt;/p&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/166888671699776474/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2025/01/micro-apps.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/166888671699776474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/166888671699776474'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2025/01/micro-apps.html' title='Micro-Apps 實戰(一)'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin2tdCzdGRkYtd7n6nxgeb-cVaEc2g8R97qX_DXb17-cIKdoOU4rC61q__tDvKNoWtHV_SLTfb81VTh7Y5GLHVslNBsHieqZJVnPq69-MN31K1BtpudhWa5NCYD0CNaN-KET_Yd1DtMPYAk2A74WPG150cGfAg8r5urVplEIQdyqwpyuZoi3wdLVo8cTQ/s72-w710-h346-c/78b3cee6ce36845b.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-633960414410941182</id><published>2025-01-16T20:00:00.031+08:00</published><updated>2025-01-16T20:00:00.321+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Micro Frontends"/><category scheme="http://www.blogger.com/atom/ns#" term="前端開發"/><category scheme="http://www.blogger.com/atom/ns#" term="微前端"/><title type='text'>微前端（Micro Frontends）介紹</title><content type='html'>&lt;h1 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;微前端（Micro Frontends）介紹&lt;/span&gt;&amp;nbsp;&lt;/h1&gt;
&lt;p&gt;微前端是一種軟體架構模式，將單一的前端應用程式分解為多個更小、更獨立的模組，這些模組可以由不同的團隊開發、測試和部署。這種架構靈感來自微服務（Microservices），它將大型後端應用拆分為小型的、以功能為中心的服務。&lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;為什麼需要微前端？&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;p data-pm-slice=&quot;1 1 []&quot;&gt;隨著前端應用的日益龐大，單體架構的缺點逐漸顯現：&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;開發效率降低&lt;/strong&gt;：多個團隊在同一代碼庫中協作，容易發生衝突。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;部署風險增加&lt;/strong&gt;：一個小改動可能導致整個應用的問題。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;技術棧單一&lt;/strong&gt;：很難引入新的框架或技術。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;微前端通過將應用拆分為獨立的模組來解決這些問題。每個模組可以有自己的代碼庫、技術棧，並獨立部署。這樣不僅提高了團隊的自主性，還使應用更易於維護和擴展。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;微前端的核心原則&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;模塊化&lt;/strong&gt;：應用被拆分為功能明確的模塊，每個模塊可單獨開發和部署。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;技術無關性&lt;/strong&gt;：不同模塊可以使用不同的技術棧。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;獨立部署&lt;/strong&gt;：每個模塊可獨立部署，無需重新部署整個應用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;漸進遷移&lt;/strong&gt;：允許在不完全重寫現有應用的情況下逐步遷移到微前端架構。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;微前端的架構&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;p&gt;微前端架構通常包括以下幾個部分：&lt;/p&gt;&lt;ol data-spread=&quot;false&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;容器應用&lt;/strong&gt;（Container Application）：負責載入和管理各個微前端模塊，提供應用的統一入口。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;微前端模塊&lt;/strong&gt;（Micro Frontend Modules）：獨立的功能模塊，每個模塊可以有自己的代碼庫和技術棧。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;共享資源&lt;/strong&gt;（Shared Resources）：用於共享樣式、庫或其他公共資源。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;通信機制&lt;/strong&gt;：模塊之間需要通過某種機制進行通信，例如事件驅動或共享狀態。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;微前端的實現方式&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol data-spread=&quot;true&quot; start=&quot;1&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;iframe 嵌套&lt;/strong&gt;&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;優點：完全隔離，模塊互不影響。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;缺點：性能較差，通信複雜。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;基於 JavaScript 的模塊化&lt;/strong&gt;&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;使用工具如 Webpack Module Federation 或 SystemJS。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;優點：性能較好，靈活性高。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;缺點：需要統一的打包和構建配置。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;服務端組裝&lt;/strong&gt;&lt;/p&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;在服務端將多個模塊組裝為一個 HTML 文件，然後返回給客戶端。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;優點：適合需要服務端渲染的應用。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;缺點：增加了服務端的複雜性。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;微前端的優勢與挑戰&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;h3&gt;優勢&lt;/h3&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;團隊自治&lt;/strong&gt;：每個團隊負責自己的模塊，開發和部署完全獨立。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;技術多樣性&lt;/strong&gt;：允許不同模塊使用不同的技術。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;高可維護性&lt;/strong&gt;：模塊間相對獨立，易於測試和維護。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;挑戰&lt;/h3&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;性能問題&lt;/strong&gt;：過多的模塊可能影響性能，需要良好的優化策略。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;通信和共享狀態&lt;/strong&gt;：模塊之間的通信需要仔細設計。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;統一用戶體驗&lt;/strong&gt;：需要確保不同模塊在風格和交互上的一致性。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;適用場景&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;ul data-spread=&quot;false&quot;&gt;&lt;li&gt;&lt;p&gt;大型應用程序的開發和維護。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;多團隊協作的環境。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;希望引入新技術或進行漸進遷移的情況。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;總結&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;微前端是一種強大的架構模式，為大型前端應用的開發和維護提供了靈活性和效率。然而，實現微前端需要解決一些挑戰，如性能優化和模塊間通信等。在選擇微前端之前，應充分評估其是否適合自己的項目需求。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/633960414410941182/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2025/01/Micro-Frontends-0.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/633960414410941182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/633960414410941182'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2025/01/Micro-Frontends-0.html' title='微前端（Micro Frontends）介紹'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-5202176916276193877</id><published>2013-07-10T14:35:00.000+08:00</published><updated>2013-07-10T14:44:36.278+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android跨平台應用(一) - 運用AD登入</title><content type='html'>人永遠是不會滿足的，而且老闆更不容易滿足，這是真的!QQ&quot;&lt;br /&gt;
&lt;br /&gt;
老闆不滿足，他也不會讓你滿足(薪水)，所以當一個稱職的員工，就要盡力滿足他&lt;br /&gt;
&lt;br /&gt;
好了，廢話說完了，再來進入正題.....&lt;br /&gt;
&lt;br /&gt;
當Android原生寫到一定程度時通常都會想還有什麼可以應用&lt;br /&gt;
&lt;br /&gt;
跨平台應用是會被用到也很常會被使用到的，所以就來往這方式研究&lt;br /&gt;
&lt;br /&gt;
這次來研究如果運用在公司內很常見的AD來登入自己開發的Android應用程式&lt;br /&gt;
&lt;br /&gt;
AD是什麼？AD(Active Directory)說明在&lt;a href=&quot;https://www.microsoft.com/taiwan/technet/itsolutions/education/deploy/adcookbook/adckc1.aspx?mfr=true&quot;&gt;這裡&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
也可以在左邊用Active Directory進維基百科查詢，這裡就不再說明&lt;br /&gt;
&lt;br /&gt;
這樣的目的當然是為了SSO(Single-Sign-On單一登入)，不用重覆建立登入資料&lt;br /&gt;
&lt;br /&gt;
看起來好像很方便，實際上.........也是很方便，哈!而且如果不這樣做，老闆是不會滿足的xd&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;先來說一下原理好了：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji1xK0PxhVt93C6v0MxawdLLIn3G7In1zQLLVVdOamfOLs9OAqGnWhPQJDhf0xTp6rTpVQk3Hek00h2Zjgs8-yK8KJUWaNlCaQ2Chc5tR_vxM3HoqIs7-f4c_25avAnb2ra1LyfY_9m0I/s1600/3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji1xK0PxhVt93C6v0MxawdLLIn3G7In1zQLLVVdOamfOLs9OAqGnWhPQJDhf0xTp6rTpVQk3Hek00h2Zjgs8-yK8KJUWaNlCaQ2Chc5tR_vxM3HoqIs7-f4c_25avAnb2ra1LyfY_9m0I/s640/3.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;佈局：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
1.Android應用程式放在Android手機內(廢話..)&lt;br /&gt;
&lt;br /&gt;
2.Web Service放在可對外的Server主機內&lt;br /&gt;
&lt;br /&gt;
3.AD Server放在公司內部Server主機內&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;說明：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
我的設計是手機端經由Web Service傳送帳號密碼給AD Server進行驗證&lt;br /&gt;
&lt;br /&gt;
其實也是可以直接傳給AD Server進行驗證，但為什麼要這樣設計呢？&lt;br /&gt;
&lt;br /&gt;
因為兩個原因：1.可以加密確保帳密的安全&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2.AD Server IP位置改變時不用重新修改Android應用程式，使用者還要更新&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;只需修改Web Service對應的AD Server 的IP位置即可&lt;br /&gt;
&lt;br /&gt;
光原因二就有必要用這種設計方式了，因為AD Server IP改變後如果使用者沒有更新新的apk檔，基本上這個程式就會出錯，所以中間加一個Web Service彈性是比較高的&lt;br /&gt;
&lt;br /&gt;
再來看一下程式碼：&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Web Service&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:c#&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.OleDb;
using System.Collections;
using System.Data;
using System.DirectoryServices;

/// &amp;lt;summary&amp;gt;
/// Search 的摘要描述
/// &amp;lt;/summary&amp;gt;
[WebService(Namespace = &quot;http://WebServiceForApp/&quot;)]//必須和android手機內的Namespace對應
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 若要允許使用 ASP.NET AJAX 從指令碼呼叫此 Web 服務，請取消註解下一行。
// [System.Web.Script.Services.ScriptService]
public class Search : System.Web.Services.WebService {
    string _path;
    string _filterAttribute;

    public OleDbConnection Conn = new OleDbConnection(System.Configuration.ConfigurationManager.ConnectionStrings[&quot;ConnectionString&quot;].ConnectionString);

    public Search () {

        //如果使用設計的元件，請取消註解下行程式碼 
        //InitializeComponent(); 
    }

    [WebMethod]
    public bool Verification(string username,string pwd)
    {
        string domain = &quot;192.168.2.211&quot;;//AD Server IP位置
        bool V = true;
        _path = &quot;LDAP://&quot; + domain;
        string domainAndUsername = domain + @&quot;\&quot; + username;
        DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);

        try
        {
            //Bind to the native AdsObject to force authentication.            
            object obj = entry.NativeObject;
            DirectorySearcher search = new DirectorySearcher(entry);

            search.Filter = &quot;(SAMAccountName=&quot; + username + &quot;)&quot;;
            search.PropertiesToLoad.Add(&quot;cn&quot;);
            SearchResult result = search.FindOne();

            //帳號是：it01
            //回覆驗證資料，無為null
            //有Data內容會是這個樣子：LDAP://192.168.2.211/CN=it01,OU=資訊部,OU=管理處,DC=goldjoint,DC=com
            if ((result == null))
            {
                V = false;
            }

            //Update the new path to the user in the directory.
            _path = result.Path;
            _filterAttribute = (string)result.Properties[&quot;cn&quot;][0];

        }
        catch (Exception ex)
        {
            //throw new Exception(&quot;Error authenticating user. &quot; + ex.Message);
            V = false;
        }


        return V;
    }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;注意：&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;手機端我是有使用到ksoap2&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;所以必須先掛載ksoap2的jar檔進來，以便連結Web Service&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;網路上掛載的方法很多都有寫，所以這裡就不再重覆，請先掛載。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Android手機端&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;void WebData()
{
//從網路上獲取資料
String NAMESPACE = &quot;http://WebServiceForApp/&quot;;//必須和Web Service內的Namespace對應
String URL = &quot;http://你的WebService位置/AppWebService/Search.asmx&quot;;
String SOAP_ACTION = &quot;http://WebServiceForApp/Verification&quot;;//NAMESPACE+WebService METHOD_NAME
String METHOD_NAME = &quot;Verification&quot;;  

//Data
SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
PropertyInfo sayHelloPI = new PropertyInfo();
sayHelloPI.setName(&quot;username&quot;);//加入帳號
sayHelloPI.setValue(id);
sayHelloPI.setType(String.class);
Request.addProperty(sayHelloPI);

PropertyInfo sayHelloPI2 = new PropertyInfo();
sayHelloPI2.setName(&quot;pwd&quot;);//加入密碼
sayHelloPI2.setValue(pw);
sayHelloPI2.setType(String.class);
Request.addProperty(sayHelloPI2);

//Request.addProperty(&quot;ID&quot;,strSearch);
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.dotNet=true;
soapEnvelope.setOutputSoapObject(Request);
HttpTransportSE aht=new HttpTransportSE(URL);
//aht.debug=true;
try {
aht.call(SOAP_ACTION, soapEnvelope);
//SoapObject result = (SoapObject)soapEnvelope.getResponse();
SoapPrimitive result = (SoapPrimitive)soapEnvelope.getResponse();//單純Data用這個

//存入回傳資料(String Check存入True or False)
check = result.toString();//Check就能拿來檢查是否有AD驗證過了


} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}	
}
&lt;/pre&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;說明：&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
有幾個重點要注意：&lt;br /&gt;
1.&lt;span style=&quot;color: #cc0000;&quot;&gt;Namespace對應&lt;/span&gt;，Web Service和Android手機端的Namespace一定要相同&lt;br /&gt;
2.我是有另外專為這個Web Service在IIS上新增一個網站做控管(這點好像不是什麼重點xd)&lt;br /&gt;
3.加不加密看狀況，我是走一般網路的80 port，也能走其他的port，但要另外開放和設定&lt;br /&gt;
&amp;nbsp; &amp;nbsp;應用程式封裝成apk檔有一定的安全性了，因為Android 2.3.3以後的版本Google有加入亂碼&lt;br /&gt;
&amp;nbsp; &amp;nbsp;，程式碼會重排，所以要知道的人還是會知道(應該是自己人xd)，如果還是要小心一點可以&lt;br /&gt;
&amp;nbsp; &amp;nbsp;加密，反正可以在Web Service解密就好，這樣就能再送AD Server驗證，本人完全沒加密xd&lt;br /&gt;
&lt;br /&gt;
以上程式碼是可以RUN的，而且也在RUN中，所以如果你不能RUN請留言我幫您看一下為什麼不能RUN。&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
我只取出部份的程式碼，其他部份可能要自己拼湊，不要跟我要全部的程式碼，因為那不是我的，所以我不能給你。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/5202176916276193877/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2013/07/android-ad.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5202176916276193877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5202176916276193877'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2013/07/android-ad.html' title='Android跨平台應用(一) - 運用AD登入'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji1xK0PxhVt93C6v0MxawdLLIn3G7In1zQLLVVdOamfOLs9OAqGnWhPQJDhf0xTp6rTpVQk3Hek00h2Zjgs8-yK8KJUWaNlCaQ2Chc5tR_vxM3HoqIs7-f4c_25avAnb2ra1LyfY_9m0I/s72-c/3.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-5696548857052770067</id><published>2013-07-10T11:19:00.001+08:00</published><updated>2013-07-10T11:19:32.042+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.net"/><title type='text'>Java Script Window Print-另開視窗方式列印</title><content type='html'>Web表單設計時還蠻常需要用到列印的，一般都會用Reporting Service&lt;br /&gt;
&lt;br /&gt;
這裡教你用Java Script的方式，另開一個視窗列印表單，順便幫自己記錄程式碼^^&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;先用DIV框定範圍&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;div id=&quot;print&quot; align=&quot;center&quot;&amp;gt;
  表單內HTML程式碼...
 .
 .
 .
 &amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;在Button加入列印OnClientClick事件&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;asp:Button ID=&quot;Button7&quot; runat=&quot;server&quot; Text=&quot;列印&quot; OnClientClick=&quot;myPrint(document.getElementById(&#39;print&#39;));return false;&quot; /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;加入JavaScript列印事件&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
        function myPrint(obj) {
            //打開一个新窗口newWindow
            var newWindow = window.open(&quot;打印窗口&quot;, &quot;_blank&quot;);
            //要打印的div的内容
            var docStr = obj.innerHTML;
            newWindow.document.write(&#39;&amp;lt;div align=&quot;center&quot;&amp;gt;&amp;lt;asp:Label ID=&quot;lb_printTitle&quot; runat=&quot;server&quot; Font-Size=&quot;X-Large&quot; style=&quot;font-family: 微軟正黑體; font-weight: 700&quot; Text=&quot;部門領用統計表&quot;&amp;gt;&amp;lt;/asp:Label&amp;gt;&amp;lt;/div&amp;gt;&#39;);
            //打印内容寫入newWindow文檔
            newWindow.document.write(docStr);
            //關閉文檔
            newWindow.document.close();
            //調用打印機
            newWindow.print();
            //關閉newWindow頁面
            newWindow.close();
        }
     &amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;畫面(瀏覽器：IE10)&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv4A-GumQhHcUjRc5mSpcIsJSFJMTOOhfeBzQjDdy8tIs27vaybMn8qe9vZQGYY3TA0b2pCfTkrg4tFeOBVSuL76BqRnbWXZdLN1o9tKdkq3yijiArk8q3vhOrtaUbm4qJDL8aa9lF74I/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;293&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv4A-GumQhHcUjRc5mSpcIsJSFJMTOOhfeBzQjDdy8tIs27vaybMn8qe9vZQGYY3TA0b2pCfTkrg4tFeOBVSuL76BqRnbWXZdLN1o9tKdkq3yijiArk8q3vhOrtaUbm4qJDL8aa9lF74I/s400/1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;表單&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjtDJzhrwU-Pq2VIBa74Mz-LkLG5S3YVjWsWVvBS1PTfhKzWHoqiGitJ7gOMWu-Da3pFET25rstRaShBzdD-LGYb28bIuFKKadILHaIccKD26OkUl1DKZsvyOepmRXDshW_5GHqFrFBlw/s1600/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;286&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjtDJzhrwU-Pq2VIBa74Mz-LkLG5S3YVjWsWVvBS1PTfhKzWHoqiGitJ7gOMWu-Da3pFET25rstRaShBzdD-LGYb28bIuFKKadILHaIccKD26OkUl1DKZsvyOepmRXDshW_5GHqFrFBlw/s400/2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;另開列印視窗&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;注意&lt;/span&gt;&lt;/div&gt;
因為另開視窗是一個全新的視窗，所以第一次用可能會發現為什麼格式什麼全跑了&lt;br /&gt;
那是因為CSS沒有一起過去，所以在newWindow.document.write(.......)要把CSS一起&lt;br /&gt;
傳過去，不然就是寫在表單中，這樣出現的表單才會和你想要的一樣。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/5696548857052770067/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2013/07/java-script-window-print.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5696548857052770067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5696548857052770067'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2013/07/java-script-window-print.html' title='Java Script Window Print-另開視窗方式列印'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv4A-GumQhHcUjRc5mSpcIsJSFJMTOOhfeBzQjDdy8tIs27vaybMn8qe9vZQGYY3TA0b2pCfTkrg4tFeOBVSuL76BqRnbWXZdLN1o9tKdkq3yijiArk8q3vhOrtaUbm4qJDL8aa9lF74I/s72-c/1.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-8839699013872415522</id><published>2013-01-30T23:23:00.000+08:00</published><updated>2013-01-30T23:26:44.032+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android 手機資料庫(六) - 使用Transaction(交易)</title><content type='html'>在Activity使用新增、修改、刪除時，有時候都會遇到需要同時處理多筆資料的狀況&lt;br /&gt;
&lt;br /&gt;
這時候如果用一般的寫法，如果在中間處理的資料出錯了，那麼資料就會不完整寫入資料庫了&lt;br /&gt;
&lt;br /&gt;
怎麼辦呢？這個時候就需要用到Transaction(交易)，Transaction在很多程式中都有用到&lt;br /&gt;
&lt;br /&gt;
而且是一定會用到，所以我們下面就來看一下在Android系統中該怎麼使用Transaction交易&lt;br /&gt;
&lt;br /&gt;
來達到多筆資料同時處理的目的，其實和其他程式一樣很簡單的。&lt;br /&gt;
&lt;br /&gt;
如果您看過前幾篇資料庫的文章的話，應該會知道其中會有一段db = helper.getWritableDatabase(); &lt;br /&gt;
&lt;br /&gt;
只要在這個下面加入：db.beginTransaction();//建立交易&lt;br /&gt;
&lt;br /&gt;
之後就可以正常的用db.insert、db.update等一般資料庫寫入&lt;br /&gt;
&lt;br /&gt;
在最後面都寫完資料庫後得加入此程式碼：db.setTransactionSuccessful();//正式寫入資料庫中&lt;br /&gt;
&lt;br /&gt;
然後我們一般會使用try{}catch{}來抓取出錯誤的訊息，只要在catch中加入db.endTransaction();//結束交易&lt;br /&gt;
&lt;br /&gt;
只要在寫入的過程中有一個出錯了，交易就會中斷，以達到多筆資料同進同出，就這麼簡單&lt;br /&gt;
&lt;br /&gt;
以上就是為您介紹在Android系統中怎麼使用Transaction的方法，謝謝。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/8839699013872415522/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2013/01/android-transaction.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/8839699013872415522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/8839699013872415522'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2013/01/android-transaction.html' title='Android 手機資料庫(六) - 使用Transaction(交易)'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-7005687034628342292</id><published>2013-01-24T13:46:00.000+08:00</published><updated>2013-01-24T13:46:46.950+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><category scheme="http://www.blogger.com/atom/ns#" term="程式碼片段"/><title type='text'>Android 實用程式碼片段(一) - 返回鍵退出(onKeyDown)、返回鍵退出確認</title><content type='html'>現在應用程式上應該都有按下返回鍵會詢問是否離開的訊息，但這是怎麼做到的呢？&lt;br /&gt;
&lt;br /&gt;
下面為您介紹此實用程式碼：&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public boolean onKeyDown(int keyCode, KeyEvent event) {//捕捉返回鍵
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {   
        	ConfirmExit();//按返回鍵，則執行退出確認
        	return true;   
        }   
        return super.onKeyDown(keyCode, event);   
    }
    public void ConfirmExit(){//退出確認
    	AlertDialog.Builder ad=new AlertDialog.Builder(MyOpenDataActivity.this);
    	ad.setTitle(&quot;離開&quot;);
    	ad.setMessage(&quot;確定要離開?&quot;);
    	ad.setPositiveButton(&quot;是&quot;, new DialogInterface.OnClickListener() {//退出按鈕
			public void onClick(DialogInterface dialog, int i) {
				// TODO Auto-generated method stub
				MyOpenDataActivity.this.finish();//關閉activity
 
			}
		});
    	ad.setNegativeButton(&quot;否&quot;,new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int i) {
				//不退出不用執行任何操作
			}
		});
    	ad.show();//示對話框
    }
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;只要在onCreate之外加入上面這段程式碼，程式就會在該Activity加入按下返回鍵時的詢問。&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/7005687034628342292/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2013/01/android-onkeydown.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/7005687034628342292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/7005687034628342292'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2013/01/android-onkeydown.html' title='Android 實用程式碼片段(一) - 返回鍵退出(onKeyDown)、返回鍵退出確認'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-3268423986384340002</id><published>2012-12-17T10:31:00.000+08:00</published><updated>2012-12-17T10:31:20.205+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facebook"/><title type='text'>利用檢視原始碼了解在臉書上誰最關注你(妳)</title><content type='html'>&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;網路上流傳一種用『檢視原始碼』就能知道誰最關注你(妳)的方法&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt; &lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;我來給它實作看看：&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;步驟一：登入你&lt;span lang=&quot;EN-US&quot;&gt;(&lt;/span&gt;妳&lt;span lang=&quot;EN-US&quot;&gt;)&lt;/span&gt;的&lt;span lang=&quot;EN-US&quot;&gt;Facebook&lt;/span&gt;到個人首頁&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;步驟二：在空白處按右鍵，選取『檢視原始碼』&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihRhIS02W_Cnhr1nW_AaWjLoEg1g5GuDkk7cccf9gbJhcybb-EcVXlAkt_H0RdplIwEoh18O-YOUky3CBNkX6yJnoF2cEM3uYMb86Q2rH2OuevjJZ2qY2fcTWnbH6KHlQ0nSasgTzAEkM/s1600/fb1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;411&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihRhIS02W_Cnhr1nW_AaWjLoEg1g5GuDkk7cccf9gbJhcybb-EcVXlAkt_H0RdplIwEoh18O-YOUky3CBNkX6yJnoF2cEM3uYMb86Q2rH2OuevjJZ2qY2fcTWnbH6KHlQ0nSasgTzAEkM/s640/fb1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;步驟三：搜尋『&lt;span lang=&quot;EN-US&quot;&gt;InitialChatFriendsList&lt;/span&gt;』&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia-ALrF0YO-emT8I5AWnvuFTHXzsa6Khk-tsCBHx5ibUTA8FcUqAnmtgtPcDHzAc0yhwYZVukBVLc4Fv3JfE1BfJmOKsj_lJIaS32W7VPLXO_b5f3t-uMb-o7NZ3zsHHuLOjzoH-SkMCQ/s1600/fb2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;130&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia-ALrF0YO-emT8I5AWnvuFTHXzsa6Khk-tsCBHx5ibUTA8FcUqAnmtgtPcDHzAc0yhwYZVukBVLc4Fv3JfE1BfJmOKsj_lJIaS32W7VPLXO_b5f3t-uMb-o7NZ3zsHHuLOjzoH-SkMCQ/s640/fb2.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;步驟四：&lt;span lang=&quot;EN-US&quot;&gt;List&lt;/span&gt;後面一串一串的數字第一個就是最關注你&lt;span lang=&quot;EN-US&quot;&gt;(&lt;/span&gt;妳&lt;span lang=&quot;EN-US&quot;&gt;)&lt;/span&gt;的人&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_K90glUwkEyih4Y2q650ia84-K2E_Qc38VREUNx0FwoNY_UMIZM2vpw72D8rCGfHnX9UTbD0FJbTGQGh0gAXTexeisELlGfvhrRejCSNusjAqc-wvzD4J5czxhdAKyZyeRPLSJRwsTU/s1600/fb4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;412&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe_K90glUwkEyih4Y2q650ia84-K2E_Qc38VREUNx0FwoNY_UMIZM2vpw72D8rCGfHnX9UTbD0FJbTGQGh0gAXTexeisELlGfvhrRejCSNusjAqc-wvzD4J5czxhdAKyZyeRPLSJRwsTU/s640/fb4.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;步驟五：把此串數字加到後面&lt;span lang=&quot;EN-US&quot;&gt;”www.facebook.com/”&lt;/span&gt;放到網址上去就知道是誰了&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtxOBlRhVlFhimr20cyV8d54Rl2cb5YCTor19AJoKpJVkilx1EvvXQJgxeO0fnfAksc8qyWo1DquhefcGUShizrT_KB45eS4716gDI8wO0lejVP1JlSQw6-FiEZldhUwf5Q7lFEG2jAAA/s1600/fb5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;64&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtxOBlRhVlFhimr20cyV8d54Rl2cb5YCTor19AJoKpJVkilx1EvvXQJgxeO0fnfAksc8qyWo1DquhefcGUShizrT_KB45eS4716gDI8wO0lejVP1JlSQw6-FiEZldhUwf5Q7lFEG2jAAA/s640/fb5.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: medium;&quot;&gt;實作的結果真的是我朋友沒錯，不過是不是最關注我的我就不知道了&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: medium;&quot;&gt;反正好玩就好了，您說對不對!&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;font-family: 微軟正黑體; font-size: 14.0pt;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/3268423986384340002/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/12/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/3268423986384340002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/3268423986384340002'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/12/blog-post.html' title='利用檢視原始碼了解在臉書上誰最關注你(妳)'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihRhIS02W_Cnhr1nW_AaWjLoEg1g5GuDkk7cccf9gbJhcybb-EcVXlAkt_H0RdplIwEoh18O-YOUky3CBNkX6yJnoF2cEM3uYMb86Q2rH2OuevjJZ2qY2fcTWnbH6KHlQ0nSasgTzAEkM/s72-c/fb1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-5545822096684901702</id><published>2012-12-10T16:33:00.001+08:00</published><updated>2013-07-10T09:55:41.636+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="spinner"/><title type='text'>Android下拉選單(spinner)應用(五) - 更換字體大小、顏色</title><content type='html'>一般網路上都會教一些基本下拉選單(spinner)，套用simple_spinner_dropdown_item或&lt;br /&gt;
&lt;br /&gt;
simple_spinner_item這些基本模板，但有時想改變Spinner內的文字大小及顏色又不知從哪下手&lt;br /&gt;
&lt;br /&gt;
今天就來教大家怎麼改變Spinner內的文字大小及顏色，當然也包含對齊方式&lt;br /&gt;
&lt;br /&gt;
我用比較簡單的方法直接由Layout下手去修改Spinner內文字的字體大小及顏色&lt;br /&gt;
&lt;br /&gt;
步驟一：&lt;br /&gt;
&lt;br /&gt;
在res--&amp;gt;layout內新增一個myspinner.xml的android xml檔，貼上下列程式碼&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;myspinner.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;TextView xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
&amp;nbsp; &amp;nbsp; android:id=&quot;@android:id/text1&quot;
&amp;nbsp; &amp;nbsp; android:layout_width=&quot;match_parent&quot;
&amp;nbsp; &amp;nbsp; android:layout_height=&quot;wrap_content&quot;
&amp;nbsp; &amp;nbsp; android:ellipsize=&quot;marquee&quot;
&amp;nbsp; &amp;nbsp; android:gravity=&quot;center&quot;
&amp;nbsp; &amp;nbsp; android:paddingLeft=&quot;8dip&quot;
&amp;nbsp; &amp;nbsp; android:singleLine=&quot;true&quot;
&amp;nbsp; &amp;nbsp; android:textColor=&quot;#8B008B&quot;
&amp;nbsp; &amp;nbsp; android:textSize=&quot;32sp&quot;
&amp;nbsp; &amp;nbsp; android:textStyle=&quot;bold&quot; &amp;gt;
&amp;lt;/TextView&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
步驟二：&lt;br /&gt;
&lt;br /&gt;
回到java程式碼，假設我們已經在main.xml中加入一個下拉選單spinner1了&lt;br /&gt;
&lt;br /&gt;
基本的下拉選單都是這樣寫的：&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//將可選内容與ArrayAdapter連接起來 
adapter = new ArrayAdapter&amp;lt;String&amp;gt;(this,android.R.layout.simple_spinner_item,Blood_group);
//對應控件
spinner = (Spinner) findViewById(R.id.spinner1);
//設置下拉列表的風格
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//將adapter 添加到spinner中  
spinner.setAdapter(adapter); 
&lt;/pre&gt;
&lt;br /&gt;
換成下面這個樣子：&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//將可選内容與ArrayAdapter連接起來 
adapter = new ArrayAdapter&amp;lt;String&amp;gt;(this,R.layout.myspinner,Blood_group);
//對應控件
spinner = (Spinner) findViewById(R.id.spinner1);
//設置下拉列表的風格
adapter.setDropDownViewResource(R.layout.myspinner);
//將adapter 添加到spinner中  
spinner.setAdapter(adapter);
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
為什麼有兩個地方是要換成myspinner的呢？&lt;br /&gt;
&lt;br /&gt;
因為adapter是代表內容(也就是下拉時)&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;setDropDownViewResource是代表靜止未點選下拉時的樣式&lt;/strike&gt;&lt;span style=&quot;color: red;&quot;&gt;(感謝網友指教)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
setDropDownViewResource是代表點選下拉時彈出的樣式&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;執行後畫面&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6InzglahbxBZC3K305mgRiSGBL7BsDSZgAICSzHloqf5gJwKRTCXMti_tvMhBWUDq_WFOhLDS_dybQE4mUk9oJlZlwdPOJet9Qk_x-ySxnAMvkrTv8r3VVxW2ADwoK9PHTmE-ftrc9W8/s1600/111.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6InzglahbxBZC3K305mgRiSGBL7BsDSZgAICSzHloqf5gJwKRTCXMti_tvMhBWUDq_WFOhLDS_dybQE4mUk9oJlZlwdPOJet9Qk_x-ySxnAMvkrTv8r3VVxW2ADwoK9PHTmE-ftrc9W8/s400/111.png&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieffJW8g0CuSkJ-InKJdttguVqNPPnypLduYcOKbKqQDTYq2LDNtfO1LYnL8PGDwwgt9jd9ssIEnbaYfeH7I7m6fyybJMHQaa0exAGFlbL-aIuPe3FXG3XRJEP-38gr9vLH-arWn-SIXI/s1600/222.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieffJW8g0CuSkJ-InKJdttguVqNPPnypLduYcOKbKqQDTYq2LDNtfO1LYnL8PGDwwgt9jd9ssIEnbaYfeH7I7m6fyybJMHQaa0exAGFlbL-aIuPe3FXG3XRJEP-38gr9vLH-arWn-SIXI/s320/222.png&quot; width=&quot;192&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
文字被我改為紫色、字體大小變32、置中對齊&lt;br /&gt;
&lt;br /&gt;
這樣簡簡單單兩個步驟就能改變下拉選單的三種樣式設定了&lt;br /&gt;
&lt;br /&gt;
以上介紹，謝謝各位!!&lt;br /&gt;
&lt;br /&gt;
ps：貼上一些參數(spinner、adapter、Blood_group)的宣告，不然新手會對應不起來&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;private Spinner spinner;  
 private ArrayAdapter&amp;lt;String&amp;gt; adapter;  
 private static final String[] Blood_group={&quot;A型&quot;,&quot;B型&quot;,&quot;O型&quot;,&quot;AB型&quot;,&quot;其他&quot;};
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/5545822096684901702/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/12/androidspinner.html#comment-form' title='9 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5545822096684901702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5545822096684901702'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/12/androidspinner.html' title='Android下拉選單(spinner)應用(五) - 更換字體大小、顏色'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6InzglahbxBZC3K305mgRiSGBL7BsDSZgAICSzHloqf5gJwKRTCXMti_tvMhBWUDq_WFOhLDS_dybQE4mUk9oJlZlwdPOJet9Qk_x-ySxnAMvkrTv8r3VVxW2ADwoK9PHTmE-ftrc9W8/s72-c/111.png" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-8567142564785368809</id><published>2012-12-02T15:21:00.001+08:00</published><updated>2012-12-04T15:15:48.185+08:00</updated><title type='text'>Android TextView應用(一) - 跑馬燈</title><content type='html'>一般的HTML有跑馬燈功能，那Android應用程式能否用跑馬燈功能呢？可以的!&lt;br /&gt;
&lt;br /&gt;
只要用TextView文字列就可以做出跑馬燈功能了，今天來做的比較特別一點&lt;br /&gt;
&lt;br /&gt;
就是我改用EditText輸入文字後，傳給TextView後做自輸入型的跑馬燈功能&lt;br /&gt;
&lt;br /&gt;
先說一下我的開發環境吧，雖然沒什麼太大影響&lt;br /&gt;
&lt;br /&gt;
我用的Android版本是4.0.3，作業系統是Window 7 64位元，eclipse當然也是for 64位元的&lt;br /&gt;
&lt;br /&gt;
接下來就來看看程式碼吧!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;main.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot; &amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/tv_ouput&quot;
        android:layout_width=&quot;100dp&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_alignParentTop=&quot;true&quot;
        android:layout_centerHorizontal=&quot;true&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:textSize=&quot;30sp&quot;
        android:singleLine=&quot;true&quot;
        android:ellipsize=&quot;marquee&quot;
        android:marqueeRepeatLimit=&quot;marquee_forever&quot;
        android:focusableInTouchMode=&quot;true&quot;
        android:focusable=&quot;true&quot;
        android:text=&quot;@string/hello_world&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/et_input&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_below=&quot;@+id/tv_ouput&quot;
        android:layout_centerHorizontal=&quot;true&quot;
        android:layout_marginTop=&quot;17dp&quot;
        android:ems=&quot;10&quot;
        android:hint=&quot;請輸入跑馬燈訊息...&quot; &amp;gt;
    &amp;lt;/EditText&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/btn_submit&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_below=&quot;@+id/et_input&quot;
        android:layout_centerHorizontal=&quot;true&quot;
        android:layout_marginTop=&quot;28dp&quot;
        android:text=&quot;@string/submit&quot; /&amp;gt;

&amp;lt;/RelativeLayout&amp;gt;


&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;TripleSpinnerActivity&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package jim.demo.rundemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  final TextView tv=(TextView)findViewById(R.id.tv_ouput);
  
  
  final EditText et = (EditText)findViewById(R.id.et_input);
  
  Button btn = (Button)findViewById(R.id.btn_submit);
  btn.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    tv.setText(et.getText().toString());
    tv.setSelected(true);
   }
   
  });
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

}

&lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;執行後畫面&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCz1x-m8r9tZxR6XdVll1Aya503duRoIgk9333SqRdO8bCkK8tOybNwWwH4X336PzRbba-FTMk6lD0SmlnjMS-olo6GTKw4vS4ubcw8NLXbCWUCqocAFKsWmh6jQNh-ia2SmajKLhPK4c/s1600/1.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCz1x-m8r9tZxR6XdVll1Aya503duRoIgk9333SqRdO8bCkK8tOybNwWwH4X336PzRbba-FTMk6lD0SmlnjMS-olo6GTKw4vS4ubcw8NLXbCWUCqocAFKsWmh6jQNh-ia2SmajKLhPK4c/s400/1.png&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLljiIIloT4HtgVn_GV8g4G0TzwhApG0Iagbrk01UL-GkAcLmCpyms6uTr-KfWaiPen3TF0_ky8jkhdIDdQUjfADso3t31R-uEjN_sg9jJx3BkN8DCAKq7Yere8zkes7mlN8Gbxk9oiMo/s1600/2.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLljiIIloT4HtgVn_GV8g4G0TzwhApG0Iagbrk01UL-GkAcLmCpyms6uTr-KfWaiPen3TF0_ky8jkhdIDdQUjfADso3t31R-uEjN_sg9jJx3BkN8DCAKq7Yere8zkes7mlN8Gbxk9oiMo/s400/2.png&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
說明：&lt;br /&gt;
&lt;br /&gt;
1‧TextView在xml上說明如下：&lt;br /&gt;
//單行文本顯示，&lt;br /&gt;
android:singleLine=&quot;true&quot;&lt;br /&gt;
//跑馬燈效果&lt;br /&gt;
android:ellipsize=&quot;marquee&quot;&lt;br /&gt;
//重複次數的設定，默認是無窮次&lt;br /&gt;
android:marqueeRepeatLimit=&quot;marquee_forever&quot;&lt;br /&gt;
//取得焦點，這是讓跑馬燈一開始就可以跑&lt;br /&gt;
android:focusableInTouchMode=&quot;true&quot;&lt;br /&gt;
android:focusable=&quot;true&quot;&lt;br /&gt;
&lt;br /&gt;
2.Activity中只差在onClick中設定完文字後&lt;br /&gt;
需要用.setSelected(true);讓焦點回到TextView上&lt;br /&gt;
&lt;br /&gt;
3.注意：&lt;span style=&quot;color: red;&quot;&gt;輸入的文字必須大於TextView的寬度，跑馬燈才會動作&lt;/span&gt;&lt;br /&gt;
所以如果發現跑馬燈不動作，可以試著在XML中把android:layout_width改小&lt;br /&gt;
&lt;br /&gt;
以上是為你做的說明，有問題歡迎提問，謝謝。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/8567142564785368809/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/12/android-textview.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/8567142564785368809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/8567142564785368809'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/12/android-textview.html' title='Android TextView應用(一) - 跑馬燈'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCz1x-m8r9tZxR6XdVll1Aya503duRoIgk9333SqRdO8bCkK8tOybNwWwH4X336PzRbba-FTMk6lD0SmlnjMS-olo6GTKw4vS4ubcw8NLXbCWUCqocAFKsWmh6jQNh-ia2SmajKLhPK4c/s72-c/1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-5181488364326208329</id><published>2012-11-07T10:32:00.001+08:00</published><updated>2012-11-07T10:39:03.973+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><category scheme="http://www.blogger.com/atom/ns#" term="spinner"/><title type='text'>Android下拉選單(spinner)應用(四) - 三層連動式下拉選單</title><content type='html'>因為很多人看完了上篇&lt;a href=&quot;http://jim690701.blogspot.tw/2012/07/androidspinner_15.html&quot;&gt;連動式下拉選單&lt;/a&gt;後開始問我怎麼再加一層做三層連動下拉選單&lt;br /&gt;
&lt;br /&gt;
而三層下拉在很多地方都會用到，如：最常用到的縣市鄉鎮選取，所以就抽空寫這篇好了&lt;br /&gt;
&lt;br /&gt;
本人用的是最白痴的寫法(因為我懶)，其實還有其他寫法，不過這個寫法最快(最懶)&lt;br /&gt;
&lt;br /&gt;
而且最直覺，就直接把二層連動下拉選單中的二維陣列再加一個三維陣列的而已&lt;br /&gt;
&lt;br /&gt;
夠簡單也夠直覺吧(夠懶)，下面就直接po程式碼，看完您就會覺得就這樣而已喔&lt;br /&gt;
&lt;br /&gt;
其實也就是這麼簡單而已，我直接從連動式下拉選單改來的，看程式碼吧。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;main.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:background=&quot;#FFFFFF&quot;
    &amp;gt;
    &amp;lt;Spinner android:id=&quot;@+id/type&quot; 
        android:layout_width=&quot;fill_parent&quot; 
          android:layout_height=&quot;45dp&quot;
          android:layout_marginLeft=&quot;75dp&quot;
          android:layout_marginRight=&quot;20dp&quot;
        android:layout_marginTop=&quot;7dp&quot; 
         android:drawSelectorOnTop=&quot;true&quot;
         android:layout_alignParentRight=&quot;true&quot; 
    /&amp;gt;
       &amp;lt;Spinner android:id=&quot;@+id/type2&quot; 
        android:layout_width=&quot;fill_parent&quot; 
          android:layout_height=&quot;45dp&quot;
          android:layout_marginLeft=&quot;75dp&quot;
          android:layout_marginRight=&quot;20dp&quot;
          android:layout_marginTop=&quot;3dp&quot; 
         android:drawSelectorOnTop=&quot;true&quot;
         android:layout_alignParentRight=&quot;true&quot; 
         android:layout_below=&quot;@id/type&quot; 
         /&amp;gt;


       &amp;lt;Spinner
           android:id=&quot;@+id/type3&quot;
           android:layout_width=&quot;fill_parent&quot;
           android:layout_height=&quot;45dp&quot;
           android:layout_marginLeft=&quot;75dp&quot;
           android:layout_marginRight=&quot;20dp&quot;
           android:layout_marginTop=&quot;3dp&quot;
           android:drawSelectorOnTop=&quot;true&quot;
           android:layout_alignParentRight=&quot;true&quot;
           android:layout_below=&quot;@+id/type2&quot; /&amp;gt;
      
&amp;lt;/RelativeLayout&amp;gt;

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;TripleSpinnerActivity&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package jim.demo.TripleSpinner;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.AdapterView.OnItemSelectedListener;

public class TripleSpinnerActivity extends Activity {
 private String[] type = new String[] {&quot;茶類&quot;, &quot;果汁類&quot;};//載入第一下拉選單
    private String[] tea = new String[]{&quot;紅茶&quot;,&quot;綠茶&quot;,&quot;烏龍綠&quot;,&quot;青茶&quot;};//起始畫面時預先載入第二下拉選單
    private String[] tea2 = new String[]{&quot;紅茶超好喝&quot;,&quot;紅茶喝完臉會紅&quot;};//起始畫面時預先載入第三下拉選單
    //第一下拉選取後載入第二下拉選單
    private String[][] type2 = new String[][]{{&quot;紅茶&quot;,&quot;綠茶&quot;,&quot;烏龍綠&quot;,&quot;青茶&quot;},{&quot;柳丁汁&quot;,&quot;西瓜汁&quot;,&quot;烏梅汁&quot;}};
    //第二下拉選取後載入第三下拉選單
    private String[][][] type3 = new String[][][]{{{&quot;紅茶超好喝&quot;,&quot;紅茶喝完臉會紅&quot;},{&quot;綠茶超好喝&quot;,&quot;綠茶喝完臉會綠&quot;},{&quot;烏龍茶超好喝&quot;,&quot;烏龍茶超烏龍&quot;},{&quot;青茶超好喝&quot;,&quot;青茶很尚青&quot;}},{{&quot;柳丁汁超好喝&quot;,&quot;柳丁汁好棒&quot;},{&quot;西瓜汁超好喝&quot;,&quot;西瓜汁還可以&quot;},{&quot;烏梅汁超好喝&quot;,&quot;烏梅汁還可以&quot;}}};
    private Spinner sp;//第一個下拉選單
    private Spinner sp2;//第二個下拉選單
    private Spinner sp3;//第三個下拉選單
    private Context context;

    ArrayAdapter&amp;lt;String&amp;gt; adapter ;

    ArrayAdapter&amp;lt;String&amp;gt; adapter2; 
    
    ArrayAdapter&amp;lt;String&amp;gt; adapter3; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
         context = this;
        
        //程式剛啟始時載入第一個下拉選單
        adapter = new ArrayAdapter&amp;lt;String&amp;gt;(this,android.R.layout.simple_spinner_item, type); 
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        sp = (Spinner) findViewById(R.id.type); 
        sp.setAdapter(adapter);
        sp.setOnItemSelectedListener(selectListener);
        
        //因為下拉選單第一個為茶類，所以先載入茶類群組進第二個下拉選單
        adapter2 = new ArrayAdapter&amp;lt;String&amp;gt;(this,android.R.layout.simple_spinner_item, tea); 
        adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        sp2 = (Spinner) findViewById(R.id.type2);
        sp2.setAdapter(adapter2);
        sp2.setOnItemSelectedListener(selectListener2);
        
      //因為下拉選單第二個為紅茶，所以先載入紅茶群組進第三個下拉選單
        adapter3 = new ArrayAdapter&amp;lt;String&amp;gt;(this,android.R.layout.simple_spinner_item, tea2); 
        adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        sp3 = (Spinner) findViewById(R.id.type3);
        sp3.setAdapter(adapter3);
        
    }
    
    //第一個下拉類別的監看式
    private OnItemSelectedListener selectListener = new OnItemSelectedListener(){
        public void onItemSelected(AdapterView&amp;lt;?&amp;gt; parent, View v, int position,long id){
         //讀取第一個下拉選單是選擇第幾個
            int pos = sp.getSelectedItemPosition();
            //重新產生新的Adapter，用的是二維陣列type2[pos]
            adapter2 = new ArrayAdapter&amp;lt;String&amp;gt;(context,android.R.layout.simple_spinner_item, type2[pos]);
            //載入第二個下拉選單Spinner
            sp2.setAdapter(adapter2);
        }
      
        public void onNothingSelected(AdapterView&amp;lt;?&amp;gt; arg0){

        }

    };
    
  //第二個下拉類別的監看式
    private OnItemSelectedListener selectListener2 = new OnItemSelectedListener(){
        public void onItemSelected(AdapterView&amp;lt;?&amp;gt; parent, View v, int position,long id){
         //讀取第一個下拉選單是選擇第幾個
            int pos = sp.getSelectedItemPosition();
         //讀取第二個下拉選單是選擇第幾個
            int pos2 = sp2.getSelectedItemPosition();
            //重新產生新的Adapter，用的是三維陣列type3[pos][pos2]
            adapter3 = new ArrayAdapter&amp;lt;String&amp;gt;(context,android.R.layout.simple_spinner_item, type3[pos][pos2]);
            //載入第三個下拉選單Spinner
            sp3.setAdapter(adapter3);
        }
      
        public void onNothingSelected(AdapterView&amp;lt;?&amp;gt; arg0){

        }

    };
}

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;執行後畫面&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZM5MYrH7vuvKoSOH9iQ0e8r3mFDriKs3FPKVzP2Z8Osd7dSeSQ9jVVmTmkDEXMnacLMEaf8IjOC3GBoz2NMUe6K6ddadQdkPa5p-k7wkKnm9EmNiwSqiVjjS3rOegW1Xhw5eq3jO7oik/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZM5MYrH7vuvKoSOH9iQ0e8r3mFDriKs3FPKVzP2Z8Osd7dSeSQ9jVVmTmkDEXMnacLMEaf8IjOC3GBoz2NMUe6K6ddadQdkPa5p-k7wkKnm9EmNiwSqiVjjS3rOegW1Xhw5eq3jO7oik/s400/1.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
選取第二個下拉選單&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvX4S_JDH3GVF4XAle_vKaLJgLApK-Oe4U8hcfeIDU51oJUF41jgeSoHsbo6fyQck3LyHU_QtQWv55vv-OFny4E-ARL4wOfYHgod5ZZUdUBllW_OdNFVM_q-4JDZjZbOeXCPG3gMGeSFw/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvX4S_JDH3GVF4XAle_vKaLJgLApK-Oe4U8hcfeIDU51oJUF41jgeSoHsbo6fyQck3LyHU_QtQWv55vv-OFny4E-ARL4wOfYHgod5ZZUdUBllW_OdNFVM_q-4JDZjZbOeXCPG3gMGeSFw/s400/2.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
點選後第二個下拉和第三個下拉選單改變&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQeWcZa8hZ42BXMYN6Oco4YJsNgaitncBauEhtL8bNjQIK0zjtjJ8YeS8LRhCHYCGKPhktrtXN1w8FkEkRwAV3y-dwqZAaWiB71F2DhzeAXdb_i-CRekYFtjUoSkD5HOX8WqENIC961I/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeQeWcZa8hZ42BXMYN6Oco4YJsNgaitncBauEhtL8bNjQIK0zjtjJ8YeS8LRhCHYCGKPhktrtXN1w8FkEkRwAV3y-dwqZAaWiB71F2DhzeAXdb_i-CRekYFtjUoSkD5HOX8WqENIC961I/s400/3.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
第三個下拉選單內容也改變了&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd_ecW_m7UirHix9vFwj2gjArV6dLFaFfQID5_-WKA_wUlR0HSes6aNISS_6vAm_gb_-wm7tZeFuGD2Nu1vKDDexG-Y-1dNZ7JbZvLu2DzX4QI2UQJ0gZTl3AMSfQhx1vh-yTVWqfpCrw/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd_ecW_m7UirHix9vFwj2gjArV6dLFaFfQID5_-WKA_wUlR0HSes6aNISS_6vAm_gb_-wm7tZeFuGD2Nu1vKDDexG-Y-1dNZ7JbZvLu2DzX4QI2UQJ0gZTl3AMSfQhx1vh-yTVWqfpCrw/s400/4.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
第一個下拉選單改變會連動其他二個下拉選單改變&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSnsmR8dOXZ3rboqQoRTkDxnMwsHVPILQQtSUdNDNcYZmAMPhepwoWWFmxLlZevPJflOa6jOwJFedrYp4muVeAJSEZ3VtjVWPcJxtyP-owPn2OpI_4Sv_cK7ZVzbmSz5DtAFNaTdEg-p8/s1600/5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSnsmR8dOXZ3rboqQoRTkDxnMwsHVPILQQtSUdNDNcYZmAMPhepwoWWFmxLlZevPJflOa6jOwJFedrYp4muVeAJSEZ3VtjVWPcJxtyP-owPn2OpI_4Sv_cK7ZVzbmSz5DtAFNaTdEg-p8/s400/5.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
說明：&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1.和&lt;a href=&quot;http://jim690701.blogspot.tw/2012/07/androidspinner_15.html&quot;&gt;連動式下拉選單&lt;/a&gt;其實改變的沒有很多，只是加入一個Spineer和一個三維陣列&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2.主要的內容要照著三維陣列內的設定，第一個下拉是類別、第二個下拉是品項&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;、第三個下拉是評價，所以一開始下拉選單內的預設值因為第一個下拉的類別&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;會預設為茶類，而第二下拉會是紅茶，所以第三個下拉就給它一維陣列紅茶的評價&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3.新增的第二個下拉選單選取監看式，new ArrayAdapter&amp;lt;String&amp;gt;產出的是一維陣列&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;括號逗點前第一區只是下拉的樣式，所以不用管它，第二區帶入三維陣列&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;給三維陣列type3第一和第二下拉的選取項就會產出一維陣列選項讓ArrayAdapter載入&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Spineer3中。&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;以上說明應該清楚了，如有問題歡迎來信指教，謝謝。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/5181488364326208329/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/11/androidspinner.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5181488364326208329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5181488364326208329'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/11/androidspinner.html' title='Android下拉選單(spinner)應用(四) - 三層連動式下拉選單'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZM5MYrH7vuvKoSOH9iQ0e8r3mFDriKs3FPKVzP2Z8Osd7dSeSQ9jVVmTmkDEXMnacLMEaf8IjOC3GBoz2NMUe6K6ddadQdkPa5p-k7wkKnm9EmNiwSqiVjjS3rOegW1Xhw5eq3jO7oik/s72-c/1.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-401336117493592048</id><published>2012-10-11T14:23:00.000+08:00</published><updated>2012-10-11T14:27:26.723+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="phoneGap"/><title type='text'>PhoneGap到底是什麼？</title><content type='html'>最近在忙著幫公司做表單電子化，一個月(11月前)要把兩個表單(外出申請單、忘刷卡單)電子化&lt;br /&gt;
&lt;br /&gt;
忙到我都忘了我有blog這件事了&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;---有點虎爛!!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
今天完成一個表單後為了有在focus我的blog的朋友們&lt;br /&gt;
&lt;br /&gt;
所以今天特別上來寫了這一篇文章&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;---因為也有人在問!&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
讓不是很了解PhoneGap的人能再更了解PhoneGap到底是什麼玩意兒？&lt;br /&gt;
&lt;br /&gt;
PhoneGap到底是什麼？是Mobile App？IPhone？App？HTML5？&lt;br /&gt;
&lt;br /&gt;
還有人說是手機應用程式，PhoneGap到底是什麼？&lt;br /&gt;
&lt;br /&gt;
用最簡單再簡單，簡單到一句話就說完的說法就是：&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: #cc0000; font-size: x-large;&quot;&gt;PhoneGap是網頁(HTML5、CSS3)和手機底層功能的中介溝通層套件&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
請把這句話表框起來，然後放到你的腦海深處不要忘記了&lt;br /&gt;
&lt;br /&gt;
為什麼說它是中介層套件，下面開始為你說明你就會了解：&lt;br /&gt;
&lt;br /&gt;
我們都知道手機應用程式開發分為兩種：Native App和&lt;a href=&quot;http://jim690701.blogspot.tw/2011/11/mobile-app_24.html&quot;&gt;Mobile App&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Native App是用原生程式碼，如Android用Java、iPhone用ObjectC...等&lt;br /&gt;
&lt;br /&gt;
Mobile App是用HTML5+手機瀏覽器&lt;br /&gt;
&lt;br /&gt;
Native App我就不廢話直接跳過了&lt;br /&gt;
&lt;br /&gt;
我們針對Mobile App來說明為什麼PhoneGap是Mobile App開發的一個&lt;span style=&quot;color: #cc0000;&quot;&gt;中介溝通層套件&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
所有的手機應用程式都是APP&lt;span style=&quot;color: #cc0000;&quot;&gt;(廢話)&lt;/span&gt;，APP 就會需要封裝，這樣才好各別下載&lt;span style=&quot;color: #cc0000;&quot;&gt;(&lt;strike&gt;好免費分享...誤&lt;/strike&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
而PhoneGap也不是開發APP的工具，因為以開發Android是用Eclipse&lt;br /&gt;
&lt;br /&gt;
Eclipse才是開發工具，PhoneGap只能算是開發中的一個套件&lt;br /&gt;
&lt;br /&gt;
而Mobile App有一個大缺點，就是雖然網頁有共通性，不過只要用到手機瀏覽器&lt;br /&gt;
&lt;br /&gt;
手機上的功能你就完全不能用，就算手機能發出七彩霓虹燈、一秒內打電話給林志玲或如花&lt;br /&gt;
&lt;br /&gt;
你也不能用，這是Mobile App最大的缺點，那你會問這跟PhoneGap有什麼關係&lt;br /&gt;
&lt;br /&gt;
怎麼會沒關係，PhoneGap就是在改善這一點的&lt;span style=&quot;color: #cc0000;&quot;&gt;中介溝通層套件(終於說到了!)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
在HTML5中用寫JavaScrip的型式就能去呼叫手機內建的功能&lt;br /&gt;
&lt;br /&gt;
這樣你說有沒有很帥，雖然它也不是萬能的，不過最少能加減用點功能也好&lt;br /&gt;
&lt;br /&gt;
以上說明應該夠清楚了，希望不會再有人看完這篇還不知道PhoneGap是什麼？能吃嗎？才好!&lt;br /&gt;
&lt;br /&gt;
最後還是不了解的歡迎寫信問題，我再幫您加強說明，謝謝。&lt;br /&gt;
&lt;br /&gt;
PS：如果以上有錯誤的地方，小弟我也歡迎指教，教學相長，我會很感謝您的。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/401336117493592048/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/10/phonegap.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/401336117493592048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/401336117493592048'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/10/phonegap.html' title='PhoneGap到底是什麼？'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-4769063175324702171</id><published>2012-09-04T17:10:00.000+08:00</published><updated>2012-09-24T17:29:04.648+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile app"/><category scheme="http://www.blogger.com/atom/ns#" term="phoneGap"/><title type='text'>PhoneGap API應用：Camera相機(二) - 選取手機內照片用img顯示出來</title><content type='html'>即&lt;a href=&quot;http://jim690701.blogspot.tw/2012/08/phonegap-apicamera-img.html&quot;&gt;上篇-用相機拍照後&lt;/a&gt;，這篇就不得不說說怎麼從手機內取出照片了&lt;br /&gt;
&lt;br /&gt;
鬼月廢話還是不要太多，不然別人會覺得我是在&quot;鬼話連篇&quot;，直接PO上程式碼&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;JavaScript程式碼&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;phonegap-1.0.0.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&amp;gt;
       
      var pictureSource;   //圖片的來源
    var destinationType;  //返回值的格式設置

    // Wait for PhoneGap to connect with the device
    document.addEventListener(&quot;deviceready&quot;,onDeviceReady,false);

    // PhoneGap 剛onload時
    function onDeviceReady() {
        pictureSource=navigator.camera.PictureSourceType;
        destinationType=navigator.camera.DestinationType;
    }
//一個按鈕將調用這個函數
//Android的怪癖：pictureSource.PHOTOLIBRARY和pictureSource.SAVEDPHOTOALBUM是相同的
//所以點選getPhoto(pictureSource.PHOTOLIBRARY)
//或是getPhoto(pictureSource.SAVEDPHOTOALBUM)功能是相同的
    function getPhoto(source) {
      // 取得圖像(成功事件 ,失敗事件,{圖片設定});
      // getpicture(cameraSuccess,cameraError,{cameraOptions});
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
        destinationType: destinationType.FILE_URI,
        sourceType: source });
    }
//照片是成功檢索時調用
    function onPhotoURISuccess(imageURI) {
      //取消註釋，以查看base64編碼的圖像數據
      // console.log(imageURI);

      //獲取的圖像處理
      var largeImage = document.getElementById(&#39;largeImage&#39;);

      //取消隱藏的圖像元素
      largeImage.style.display = &#39;block&#39;;

      //顯示取得的照片
      // The inline CSS rules are used to resize the image
      largeImage.src = imageURI;
    }

    //錯誤發生時 
    function onFail(message) {
      alert(&#39;Failed because: &#39; + message);
    }

      &amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;html元件&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;button onclick=&quot;getPhoto(pictureSource.PHOTOLIBRARY);&quot;&amp;gt;從相片的檔案庫&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;button onclick=&quot;getPhoto(pictureSource.SAVEDPHOTOALBUM);&quot;&amp;gt;從相片簿&amp;lt;/button&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;img style=&quot;display:none;width:60px;height:60px;&quot; id=&quot;largeImage&quot; src=&quot;&quot; /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;實作出來的畫面：&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkUoPtFyV-Sk3kryHRLl1D_4ln5n5_CiSq6aGTT-5MXYWsQzPmIsxTlyjcViWX7fQpbCXxZCi4XWuOLUwKzAaIH4F0kN5xg8fAaLQuLVH_gCCdqLNVvx9Ra_koRregFPUt9af33KS6Ts/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;208&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkUoPtFyV-Sk3kryHRLl1D_4ln5n5_CiSq6aGTT-5MXYWsQzPmIsxTlyjcViWX7fQpbCXxZCi4XWuOLUwKzAaIH4F0kN5xg8fAaLQuLVH_gCCdqLNVvx9Ra_koRregFPUt9af33KS6Ts/s400/1.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtTXYqzdsMPy8-funEgsKFT-AjM8y6AKiLpIDD7RbbqjayeC4Op4pvIdV2-sAGZ4sAN6b4lEILv7H_IbCms7QpfruEs_cccWmytxQdIGMCbaJvqIQRbLu-sS1QyyCE5dDbd422kAhgWKI/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtTXYqzdsMPy8-funEgsKFT-AjM8y6AKiLpIDD7RbbqjayeC4Op4pvIdV2-sAGZ4sAN6b4lEILv7H_IbCms7QpfruEs_cccWmytxQdIGMCbaJvqIQRbLu-sS1QyyCE5dDbd422kAhgWKI/s400/2.png&quot; width=&quot;265&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbmwXVtP6-Xz3n8VrpcBArmewk9NAbo66-Qe3pDwre8Ri0x1LSWqkLsslvmoRRcXFVfGu9O_0UKqO5aEgiLb6H_TLR0Br3o6RBn2dkYheqZOT1-sOZAe4wblwHmnwkIG7OdJhgPHb50g/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtbmwXVtP6-Xz3n8VrpcBArmewk9NAbo66-Qe3pDwre8Ri0x1LSWqkLsslvmoRRcXFVfGu9O_0UKqO5aEgiLb6H_TLR0Br3o6RBn2dkYheqZOT1-sOZAe4wblwHmnwkIG7OdJhgPHb50g/s400/3.png&quot; width=&quot;238&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmsrrhP02c7jBMkFzIKj2xz6mznNHeQQKUobGl5EL_Ntwp789Qew4iSeNHwBtBTdc0ky5kNyEgcfACgNb_HevH7387AHRWf23vu8Kidi1ADLArDey4BQBTXM0kX_sQg2HLlcPVyk8yIwI/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmsrrhP02c7jBMkFzIKj2xz6mznNHeQQKUobGl5EL_Ntwp789Qew4iSeNHwBtBTdc0ky5kNyEgcfACgNb_HevH7387AHRWf23vu8Kidi1ADLArDey4BQBTXM0kX_sQg2HLlcPVyk8yIwI/s400/4.png&quot; width=&quot;370&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;說明：&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
雖然有兩個功能按鈕可以作出這個功能，而且帶入的參數不同&lt;br /&gt;
&lt;br /&gt;
但其實做出來的功能是一樣的，原因是Android的怪癖&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://docs.phonegap.com/en/1.0.0/phonegap_camera_camera.md.html#Camera&quot; style=&quot;background-color: #f6f4f2; color: #f06433; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px; text-decoration: none; text-shadow: rgb(255, 255, 255) 0px 1px 0px;&quot;&gt;Camera&lt;/a&gt;&lt;span style=&quot;background-color: #f6f4f2; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px;&quot;&gt;.PictureSourceType.PHOTOLIBRARY和&lt;/span&gt;&lt;span style=&quot;background-color: #f6f4f2; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px;&quot;&gt;PictureSourceType.SAVEDPHOTOALBUM&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: #f6f4f2; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: #f6f4f2; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; line-height: 20px;&quot;&gt;會被視為相同&lt;/span&gt;&lt;span style=&quot;background-color: #f6f4f2; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20px;&quot;&gt;，都&lt;/span&gt;會都出現相同的相冊，&lt;a href=&quot;http://docs.phonegap.com/en/1.0.0/phonegap_camera_camera.md.html&quot;&gt;官網說明文件&lt;/a&gt;中有提到&lt;br /&gt;
&lt;br /&gt;
以上是為您做的簡單介紹，謝謝。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/4769063175324702171/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/09/phonegap-apicamera-img.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/4769063175324702171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/4769063175324702171'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/09/phonegap-apicamera-img.html' title='PhoneGap API應用：Camera相機(二) - 選取手機內照片用img顯示出來'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDkUoPtFyV-Sk3kryHRLl1D_4ln5n5_CiSq6aGTT-5MXYWsQzPmIsxTlyjcViWX7fQpbCXxZCi4XWuOLUwKzAaIH4F0kN5xg8fAaLQuLVH_gCCdqLNVvx9Ra_koRregFPUt9af33KS6Ts/s72-c/1.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-2455696693237270305</id><published>2012-08-30T11:18:00.000+08:00</published><updated>2012-08-30T11:22:05.333+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile app"/><category scheme="http://www.blogger.com/atom/ns#" term="phoneGap"/><title type='text'>PhoneGap API應用：Camera相機(一) - 用相機拍照後用img顯示出來</title><content type='html'>最近因為比較忙一些專案，所以比較沒空寫blog文章&lt;br /&gt;
&lt;br /&gt;
因為之前寫&lt;a href=&quot;http://jim690701.blogspot.tw/p/android-native-app.html&quot;&gt;Native App(原生應用程式)&lt;/a&gt;比較多，Mobile App的部份相對的就比較少&lt;br /&gt;
&lt;br /&gt;
所以今後會先寫一幾篇&lt;a href=&quot;http://jim690701.blogspot.tw/p/mobile-app.html&quot;&gt;Mobile App&lt;/a&gt;，Android的開發是很廣泛的，不限定一定要用&lt;br /&gt;
&lt;br /&gt;
怎樣的方式開發，像電子報來說，你可以用Native的方式開發，也能用PhoneGap&lt;br /&gt;
&lt;br /&gt;
的Mobile app方式開發，這都是可行的，所以開發是沒有一定的形式，在於使用&lt;br /&gt;
&lt;br /&gt;
者和設計者的喜好和習慣，這兩種開發方式都有其優缺點，優缺點我在&lt;a href=&quot;http://jim690701.blogspot.tw/2011/11/mobile-app_24.html&quot;&gt;這裡&lt;/a&gt;有介紹&lt;br /&gt;
&lt;br /&gt;
過了，各位可以參考，好!以上是我的完全和本文無關的碎碎唸，系列文章第一篇的&lt;br /&gt;
&lt;br /&gt;
廢話都是比較多的請見諒，接下來進入主題。&lt;br /&gt;
&lt;br /&gt;
我會針對PhoneGap API的各大項API做各別應用上的大略介紹，實際在開發上各位還&lt;br /&gt;
&lt;br /&gt;
是要針對需求做自我轉變，我不可能都猜到各位實際開發上會怎麼使用它，如果都猜&lt;br /&gt;
&lt;br /&gt;
得到，我就改行當算命的了XD(誤)。&lt;br /&gt;
&lt;br /&gt;
如果建立、安裝及設定Phonegap因為之前我就有介紹過了&lt;a href=&quot;http://jim690701.blogspot.tw/2011/10/android-phonegap.html&quot;&gt;PhoneGap安裝&lt;/a&gt;，所以之後系列&lt;br /&gt;
&lt;br /&gt;
應用上就都直接貼上程式碼，不再重覆介紹了，請見諒!，直接PO上JavaScript程式碼再來說明。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;JavaScript程式碼&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&amp;gt;
       
       //功用和onload相同
       document.addEventListener(&quot;deviceready&quot;, onDeviceReady, false);
    
    function onDeviceReady() {
        // Empty
    }
 //一個按鈕將調用這個函數
    function capturePhoto() {
       // 取得圖像(成功事件 ,失敗事件,{圖片設定});
      // getpicture(cameraSuccess,cameraError,{cameraOptions});
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 });
    }
    //照片是成功檢索時調用
    function onPhotoDataSuccess(imageData) {
      //取消註釋，以查看base64編碼的圖像數據
      // console.log(imageData);

      //獲取的圖像處理
      var smallImage = document.getElementById(&#39;smallImage&#39;);

      //取消隱藏的圖像元素
      smallImage.style.display = &#39;block&#39;;

      //顯示拍攝的照片
      //內聯 CSS規則是用來調整圖像的大小
      smallImage.src = &quot;data:image/jpeg;base64,&quot; + imageData;
    }

    //錯誤發生時 
    function onFail(message) {
      alert(&#39;Failed because: &#39; + message);
    }
      &amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;html元件&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;button onclick=&quot;capturePhoto();&quot;&amp;gt;Capture Photo&amp;lt;/button&amp;gt;
&amp;lt;img style=&quot;display:none;width:60px;height:60px;&quot; id=&quot;smallImage&quot; src=&quot;&quot; /&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;實作出來的畫面：&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYIpsCm14AKlTqFOPukm1-tM2Bf_3YItdoBTjDIPpv6PT8KQ1zo_yaU4pOig4aOF1jwQcpejT9cXPkicSV07_SzOO_tcWA249CRN7YrDyCO0YvW1IYXRzQ7c4qeL3bToRRL897ga6N9BA/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;65&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYIpsCm14AKlTqFOPukm1-tM2Bf_3YItdoBTjDIPpv6PT8KQ1zo_yaU4pOig4aOF1jwQcpejT9cXPkicSV07_SzOO_tcWA249CRN7YrDyCO0YvW1IYXRzQ7c4qeL3bToRRL897ga6N9BA/s400/2.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
跳出來的選取相機和Native中的&lt;a href=&quot;http://jim690701.blogspot.tw/2012/07/android-camera-intent.html&quot;&gt;使用其他服務幫忙拍照&lt;/a&gt;類似&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszunNLL_6OLErJy_Ck-nq5PtcHgAefONcMwXHy6E2xLqgv2bdftHvhguvwVjVXWh-uY2vqhOqtjs8Sl5m6QlDjNOCxNfOc3fDxWhj_Vfm1BURKcJbA1GqTI0PQKvjIuRLq3KbvC2QIgE/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgszunNLL_6OLErJy_Ck-nq5PtcHgAefONcMwXHy6E2xLqgv2bdftHvhguvwVjVXWh-uY2vqhOqtjs8Sl5m6QlDjNOCxNfOc3fDxWhj_Vfm1BURKcJbA1GqTI0PQKvjIuRLq3KbvC2QIgE/s400/3.png&quot; width=&quot;393&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
拍照後，圖片就直接出現在img內&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7UF1oDaLsYztFH0DdcESxPNSa0IyZ9xjFQiZbcvsTqUrP-e075I4YfuyCP3vUNX06cODl1XAYkGhG8G36aOAUNQxJ6cGTfZozeLZMkx0kD9yZ2M5RXf348AWQHjy0kacJlMiAGqoukA/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7UF1oDaLsYztFH0DdcESxPNSa0IyZ9xjFQiZbcvsTqUrP-e075I4YfuyCP3vUNX06cODl1XAYkGhG8G36aOAUNQxJ6cGTfZozeLZMkx0kD9yZ2M5RXf348AWQHjy0kacJlMiAGqoukA/s400/4.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;說明：&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
看得懂JavaScript的應該自己看程式碼就知道了，全部的重點就是&lt;br /&gt;
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50 });&lt;br /&gt;
&lt;br /&gt;
再來就是顯示圖片&amp;nbsp;smallImage.src = &quot;data:image/jpeg;base64,&quot; + imageData;&lt;br /&gt;
&lt;br /&gt;
以上是為您做的簡單介紹，謝謝。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/2455696693237270305/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/phonegap-apicamera-img.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/2455696693237270305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/2455696693237270305'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/phonegap-apicamera-img.html' title='PhoneGap API應用：Camera相機(一) - 用相機拍照後用img顯示出來'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYIpsCm14AKlTqFOPukm1-tM2Bf_3YItdoBTjDIPpv6PT8KQ1zo_yaU4pOig4aOF1jwQcpejT9cXPkicSV07_SzOO_tcWA249CRN7YrDyCO0YvW1IYXRzQ7c4qeL3bToRRL897ga6N9BA/s72-c/2.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-1969078515439761840</id><published>2012-08-21T10:12:00.000+08:00</published><updated>2012-08-21T10:16:48.657+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adapter"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android Adapter家族系列(三) - BaseAdapter</title><content type='html'>今天介紹Adapter家族內一個本人還蠻常用到的子類別BaseAdapter&lt;br /&gt;
&lt;br /&gt;
幾乎元件在使用自定義的方式呈現時最常出現的一個子類別&lt;br /&gt;
&lt;br /&gt;
因為自定義的view是自由設定的，所以不能像ArrayAdapter只是單純&lt;br /&gt;
&lt;br /&gt;
只帶入資料而已，必須對view內的元件也做設定及加入事件等&lt;br /&gt;
&lt;br /&gt;
也就是說主要的Activity只是建構此子類別，帶入相關需要的參數&lt;br /&gt;
&lt;br /&gt;
其他的自定義view元件想要怎麼加、想要怎麼設定、做什麼事&lt;br /&gt;
&lt;br /&gt;
都是在BaseAdapter內做設定就可以了，這樣說應該聽了還是霧煞煞&lt;br /&gt;
&lt;br /&gt;
我們用實際的程式碼來邊做邊說明好了。&lt;br /&gt;
&lt;br /&gt;
這裡我們用自定義的ListView來做說明：&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;ListView listView01 = (ListView)findViewById(R.id.listView1); 
     CharSequence[] list = MemorandumDate;
     CharSequence[] list2 = MemorandumNote;
     CharSequence[] list3 = MemorandumPW;
     BaseAdapter adapter = new MyAdapter(this, list, mID, list2, list3, mreminder);  
     listView01.setAdapter(adapter);
&lt;/pre&gt;
&lt;br /&gt;
說明：&lt;br /&gt;
在主要的Activity中，找到ListView元件，然後我們建構一個適配器adapter&lt;br /&gt;
&lt;br /&gt;
CharSequence[]是字元陣列，用來儲存文字用的，我同時在其他地方有宣告三個字元陣列&lt;br /&gt;
&lt;br /&gt;
(list、list2、list3)，也分別給於其值(此部份請自己依所需撰寫)及兩個整數陣列(mID、mreminder)&lt;br /&gt;
&lt;br /&gt;
帶入建構子中建構該元件後帶入ListView，要帶入什麼參數和參數的順序是依照規劃MyAdapter這個&lt;br /&gt;
&lt;br /&gt;
BaseAdapter子類別時怎麼開的，這裡就會是需要什麼樣的參數和順序，下面貼出MyAdapter的程式碼。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package jim.memorandum;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MyAdapter extends BaseAdapter{  
 public LayoutInflater myInflater;
 public Context context;
    CharSequence[] mDate = null;
    CharSequence[] mData = null;
    CharSequence[] mPw = null;
    int[] MID = null;
    int[] mreminder = null;
    
    public MyAdapter(Context ctxt, CharSequence[] mdate,int[] mID,CharSequence[] mdata,CharSequence[] mpw,int[] mreminder){
        myInflater = LayoutInflater.from(ctxt);
        this.mDate = mdate;
        this.MID = mID;
        this.mData = mdata;
        this.context = ctxt;
        this.mPw = mpw;
        this.mreminder = mreminder;
    }

 public int getCount() {
  // TODO Auto-generated method stub
  return MID.length;
 }

 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return MID[position];
 }

 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return position;
 }

 public View getView(int position, View convertView, ViewGroup parent) {
  final int index = position;
         
  ViewTag viewTag;
        
        if(convertView == null){
            
            convertView = myInflater.inflate(R.layout.list_data, null);
            
           
            viewTag = new ViewTag(
                    (TextView)convertView.findViewById(R.id.tv_Date),
                    (TextView)convertView.findViewById(R.id.tv_Data),
                    (ImageButton)convertView.findViewById(R.id.ibtn_edit),
                    (ImageButton)convertView.findViewById(R.id.ibtn_del),
                    (ImageView)convertView.findViewById(R.id.img_remind),
                    (ImageView)convertView.findViewById(R.id.img_lock)
                    );
            
            convertView.setTag(viewTag);
        }
        else{
            viewTag = (ViewTag) convertView.getTag();
        }
        
        //如果有設定密碼就只顯示前五個字
        String stitle =&quot;&quot;; 
        if(!mPw[position].toString().equalsIgnoreCase(&quot;&quot;)){
         stitle = mData[position].toString();
         if(stitle.length() &amp;amp;gt; 3){
         stitle = stitle.subSequence(0, 3) + &quot;...&quot;;
         }
         else
         {
          stitle = mData[position].toString();
         }
        }
        else
        {
         stitle = mData[position].toString();
        }
        
        viewTag.tvdata.setText(stitle);
        viewTag.tvdate.setText(mDate[position].toString());    
        
        //提醒
        if(mreminder[index] == 1)
        {
           viewTag.img_reminder.setImageResource(R.drawable.checkbox_on);
        }
        else
        {
          viewTag.img_reminder.setImageResource(R.drawable.checkbox_off);
        }
           
       
        //是否有密碼
        if(!mPw[index].toString().equalsIgnoreCase(&quot;&quot;))
        {
           viewTag.img_lock.setImageResource(R.drawable.lock_on);
        }
        else
        {
          viewTag.img_lock.setImageResource(R.drawable.lock_off);
        }
        
        
        //修改按鈕
        final ImageButton btn_edit = (ImageButton) convertView.findViewById(R.id.ibtn_edit);
        btn_edit.setOnClickListener(new View.OnClickListener()  {
          public void onClick(View v)  {
         
         //有密碼時必須輸入密碼
         if(!mPw[index].toString().equalsIgnoreCase(&quot;&quot;))
         {
          LayoutInflater factory=LayoutInflater.from(context);
           //得到自定義對話框
                final View DialogView=factory.inflate(R.layout.dialog, null);
                
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle(&quot;請輸入密碼&quot;);
                builder.setCancelable(false);
                builder.setView(DialogView); //設置自定義對話框樣式
             builder.setPositiveButton(&quot;送出&quot;, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                       try
                         {
                            EditText pw = (EditText)DialogView.findViewById(R.id.pw_dialog);//輸入之密碼
                            //驗證密碼是否相同
                            String sPW1 = mPw[index].toString();//原密碼
                            String sPW2 = pw.getText().toString();//驗證密碼
                            if(sPW1.equals(sPW2))
                            {
                             //相同就進入 
                                Intent intent_request = new Intent(context, Edit.class);
                                String val=String.valueOf(MID[index]);
                                intent_request.putExtra(&quot;val&quot;, val); 
                                context.startActivity(intent_request);    
                              
                            }else
                            {
                             //不相同時顯示密碼錯誤
                                Toast.makeText(context,&quot;密碼錯誤！&quot;, Toast.LENGTH_SHORT).show(); 
                            }                   
                          }catch(Exception e)
                          {
                             e.printStackTrace();
                          }
                  }
             });
             
             builder.setNegativeButton(&quot;取消&quot;, new DialogInterface.OnClickListener() {
              public void onClick(DialogInterface dialog, int id) {
              }
             });  
                
             AlertDialog alert = builder.create();
             alert.show();
             
         }else
         {
          Intent intent_request = new Intent(context, Edit.class);
             String val=String.valueOf(MID[index]);
             intent_request.putExtra(&quot;val&quot;, val); 
                context.startActivity(intent_request);
         }
          }
        });
        
        //刪除按鈕
        final ImageButton btn_del = (ImageButton) convertView.findViewById(R.id.ibtn_del);
        btn_del.setTag(position);
        btn_del.setOnClickListener(new View.OnClickListener()  {
         
          public void onClick(View v)  {
           AlertDialog.Builder builder = new AlertDialog.Builder(context);
           
           builder.setMessage(&quot;確定要刪除?&quot;);
           builder.setCancelable(false);
           
           builder.setPositiveButton(&quot;Yes&quot;, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int dialog_id) {
           SQLiteDatabase db;
           NewListDataSQL helper = new NewListDataSQL(context, &quot;MemorandumSQL&quot;);
           db = helper.getReadableDatabase();
           long long1 = db.delete(&quot;newMemorandum&quot;, &quot;_ID=&quot; + MID[index], null);               
        //添加成功後返回行號，失敗後返回-1
      if (long1 == -1) {
       Toast.makeText(context,
         &quot;刪除失敗！&quot;, Toast.LENGTH_SHORT)
         .show();
      } else {
       Intent intent = new Intent(context, MemorandumActivity.class);
                context.startActivity(intent);
                quit();//關閉，讓back鍵不會出現上一頁
      }
    
                }
            });
           builder.setNegativeButton(&quot;No&quot;, new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
          }
         });   
         
         AlertDialog alert = builder.create();
         alert.show();
          }
        });
        
        return convertView;
 }
   
    public class ViewTag{
     TextView tvdate;
        TextView tvdata;
        ImageButton ibtnEdit;
        ImageButton ibtnDel;
        ImageView img_reminder;
        ImageView img_lock;
        
        public ViewTag(TextView date, TextView data, ImageButton edit, ImageButton del, ImageView img1, ImageView img2){
            this.tvdate = date;
            this.tvdata = data;
            this.ibtnEdit = edit;
            this.ibtnDel = del;
            this.img_reminder = img1;
            this.img_lock = img2;
            
        }
    }
    
    public void quit() {
        int pid = android.os.Process.myPid();
        android.os.Process.killProcess(pid);
        System.exit(0);
    }
    
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
說明：&lt;br /&gt;
1.MyAdapter是繼承自BaseAdapter這個子類別&lt;br /&gt;
&lt;br /&gt;
2.LayoutInflater myInflater 指的是一種擴充，就是說如果你想用自定的XML配置檔&lt;br /&gt;
&lt;br /&gt;
可以用此擴充把自定的XML置檔加入到現有元件中&lt;br /&gt;
&lt;br /&gt;
3.Activity在建構此類別時，需要帶入什麼參數是在MyAdapter 內設定的&lt;br /&gt;
如果這個也不了解請麻煩去翻一下物件導向書籍&lt;br /&gt;
&lt;br /&gt;
4.重點在getView內，所有的自定介面設定、處理都在getView內產生及設定、處理&lt;br /&gt;
&lt;br /&gt;
5.有使用一個viewTag的元件設定類別，要告訴介面自定義的XML內有哪些元件配置&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
貼出自定義的XML配置檔，讓各位更了解崁在ListView內的是怎麼配置的&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;list_data.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:descendantFocusability=&quot;blocksDescendants&quot;
    android:background=&quot;@drawable/button_style&quot; &amp;gt;

    &amp;lt;RelativeLayout
        android:id=&quot;@+id/relativeLayout1&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot; &amp;gt;


        &amp;lt;TextView
            android:id=&quot;@+id/tv_Date&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot;
            android:textSize=&quot;20dp&quot; /&amp;gt;
        
        
        &amp;lt;ImageView
        android:id=&quot;@+id/img_lock&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_toLeftOf=&quot;@+id/img_remind&quot;
        android:layout_alignParentTop=&quot;true&quot;
        android:contentDescription=&quot;@string/password&quot;
        /&amp;gt;
        
        
        &amp;lt;ImageView
        android:id=&quot;@+id/img_remind&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_toLeftOf=&quot;@+id/ibtn_edit&quot;
        android:layout_alignParentTop=&quot;true&quot;
        android:contentDescription=&quot;@string/remind&quot;
        /&amp;gt;
        

        &amp;lt;ImageButton
            android:id=&quot;@+id/ibtn_del&quot;
            android:layout_width=&quot;50dp&quot;
            android:layout_height=&quot;50dp&quot;
            android:layout_alignParentRight=&quot;true&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:src=&quot;@android:drawable/ic_menu_delete&quot;
            android:contentDescription=&quot;@string/del&quot; /&amp;gt;


        &amp;lt;ImageButton
            android:id=&quot;@+id/ibtn_edit&quot;
            android:layout_width=&quot;50dp&quot;
            android:layout_height=&quot;50dp&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_toLeftOf=&quot;@+id/ibtn_del&quot;
            android:src=&quot;@android:drawable/ic_menu_edit&quot;
            android:contentDescription=&quot;@string/edit&quot; /&amp;gt;

    &amp;lt;/RelativeLayout&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/tv_Data&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:singleLine=&quot;true&quot;
        android:textAppearance=&quot;?android:attr/textAppearanceLarge&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;實際圖型：&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1Pmp0xmLXFQYx7MCFWzYge7DgofIC4AVhmLIHLbmECsd1D56qGV-p0yIX1fuinXgAzFRnV6S1eCHrnhOhjyzI-p_7o3Y3-JCDPlUOdn56SIPDOKyR0Q87gEEr9rp45OgGQ5Ts40r7YU/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1Pmp0xmLXFQYx7MCFWzYge7DgofIC4AVhmLIHLbmECsd1D56qGV-p0yIX1fuinXgAzFRnV6S1eCHrnhOhjyzI-p_7o3Y3-JCDPlUOdn56SIPDOKyR0Q87gEEr9rp45OgGQ5Ts40r7YU/s640/1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
這個是ListView中的自定義圖型，當然這是有美化過的，所以看起來才會有點不一樣&lt;br /&gt;
&lt;br /&gt;
不過如果你想要做到像這個樣子，就一定要用BaseAdapter，然後套用自定義XML配置檔list_data.xml&lt;br /&gt;
&lt;br /&gt;
不然是做不出這樣很自由的變化配置的，以上介紹，謝謝。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/1969078515439761840/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-baseadapter.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1969078515439761840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1969078515439761840'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-baseadapter.html' title='Android Adapter家族系列(三) - BaseAdapter'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1Pmp0xmLXFQYx7MCFWzYge7DgofIC4AVhmLIHLbmECsd1D56qGV-p0yIX1fuinXgAzFRnV6S1eCHrnhOhjyzI-p_7o3Y3-JCDPlUOdn56SIPDOKyR0Q87gEEr9rp45OgGQ5Ts40r7YU/s72-c/1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-3368171861603845750</id><published>2012-08-13T10:55:00.000+08:00</published><updated>2012-08-13T11:01:26.117+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adapter"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="ArrayAdapter"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android Adapter家族系列(二) - ArrayAdapter</title><content type='html'>這次開始介紹Adapter的各子類別，因為怕太過深入會不容易了解，所以介紹各子類時&lt;br /&gt;
&lt;br /&gt;
都只介紹一些比較基本的應用，如果有想更深入了解的人可以參考官網上面的介紹&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/reference/android/widget/ArrayAdapter.html&quot;&gt;ArrayAdapter&lt;/a&gt;上面有很完整的說明，謝謝。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
我拿ArrayAdapter來橋接Spinner(下拉選單)做為介紹&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;直接帶入陣列當資料&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//定義adapter為ArrayAdapter
ArrayAdapter&amp;lt;String&amp;gt; adapter ;

//建立陣列
private String[] type = new String[] {&quot;茶類&quot;, &quot;果汁類&quot;};

//物件化
android.widget.ArrayAdapter.ArrayAdapter&amp;lt;string&amp;gt;(Context context, int textViewResourceId, String[] objects)
//上面是原式，textViewResourceId是下拉選單的樣式

adapter = new ArrayAdapter&amp;lt;String&amp;gt;(this,android.R.layout.simple_spinner_item, type); 

//設定下拉選單點選後出現選單的樣式，使用的是內建預設樣式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

//下拉選單
private Spinner sp;

sp = (Spinner) findViewById(R.id.type); 

sp.setAdapter(adapter);
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
重點：&lt;br /&gt;
可能你會發現ArrayAdapter在物件化時，有一個樣式textViewResourceId，&lt;br /&gt;
然後setDropDownViewResource又再設定一個樣式，為什麼呢？&lt;br /&gt;
因為textViewResourceId指的是下拉選單還未點選時的下拉選單樣式&lt;br /&gt;
而setDropDownViewResource設定的是點選下拉選單後跳出選單的樣式&lt;br /&gt;
這兩者是不一樣的，這樣說各位應該還是一頭霧水，我用圖片說明好了&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;new物件時樣式用simple_spinner_item&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBufgC-Vy9ZIIOMMMN38x8HkXmMMK3Imr9J0Ol2gmHom41pjJ4BBygf0r3S02mC2skg6f-DeHcXVjocVS0hGKmB9fEVxGNDQ3Yk_z3mM23UidmYSsyZQrHlUmMh-r0ySF_l32G5w-1uA/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBufgC-Vy9ZIIOMMMN38x8HkXmMMK3Imr9J0Ol2gmHom41pjJ4BBygf0r3S02mC2skg6f-DeHcXVjocVS0hGKmB9fEVxGNDQ3Yk_z3mM23UidmYSsyZQrHlUmMh-r0ySF_l32G5w-1uA/s640/1.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;new物件時樣式用&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;simple_spinner_dropdown_item&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKkRtjylpdGmseGFCYCUe44zk7Qbs_fJYQYqOoH20v1rTxRyio1FLMcJ8Fr2VF_3gFIzsGHXt6ex_Nix6zoj_Q649ubnUvFL8Jv78-phfgxXwGB7xTsedZilTN70ivCoRFLuJ3F3ki8sg/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKkRtjylpdGmseGFCYCUe44zk7Qbs_fJYQYqOoH20v1rTxRyio1FLMcJ8Fr2VF_3gFIzsGHXt6ex_Nix6zoj_Q649ubnUvFL8Jv78-phfgxXwGB7xTsedZilTN70ivCoRFLuJ3F3ki8sg/s640/2.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;setDropDownViewResource物件時樣式用simple_spinner_item&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgKyFCCBdmgsKb3GYjb_0bsJ0WZVHNFrCuaTyOjaNvDfKA7kg0cwqUxn4N5tm5h2K108o-0FOnlT2GQ3jyMkMbSH8m0h0S1PY8x7-blzP2FcS545DH9692PL8OC8opFfcAq_rylYanMww/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgKyFCCBdmgsKb3GYjb_0bsJ0WZVHNFrCuaTyOjaNvDfKA7kg0cwqUxn4N5tm5h2K108o-0FOnlT2GQ3jyMkMbSH8m0h0S1PY8x7-blzP2FcS545DH9692PL8OC8opFfcAq_rylYanMww/s640/3.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;setDropDownViewResource物件時樣式用&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;simple_spinner_dropdown_item&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX59mcVQzciAda8OqNCOCBmy5NT-FW9pD4UO231_qkjy1A723X15PnhzGwjKn-5jVV5DGmCr0YZ6VHvxBnRVklTH1Ogc7a_UpEIlwYShPBDtCgTcUL0GarGYJrKWnu1_40YvmCPyvrfc4/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX59mcVQzciAda8OqNCOCBmy5NT-FW9pD4UO231_qkjy1A723X15PnhzGwjKn-5jVV5DGmCr0YZ6VHvxBnRVklTH1Ogc7a_UpEIlwYShPBDtCgTcUL0GarGYJrKWnu1_40YvmCPyvrfc4/s640/4.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
有看清楚了嗎？new物件時textViewResourceId的樣式設定指的是下拉選單出現時的樣式&lt;br /&gt;
setDropDownViewResource指的是彈出下拉選單時，出現列表的樣式，此兩者是不同的&lt;br /&gt;
當然這兩者也都能使用自定義的佈局XML，只要自己新增一個XML，然後就能在textViewResourceId或setDropDownViewResource裡面選取，選單內的樣式也會跟著改變&lt;br /&gt;
以上是為你做ArrayAdapter的簡單介紹，謝謝。&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/3368171861603845750/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-arrayadapter.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/3368171861603845750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/3368171861603845750'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-arrayadapter.html' title='Android Adapter家族系列(二) - ArrayAdapter'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBufgC-Vy9ZIIOMMMN38x8HkXmMMK3Imr9J0Ol2gmHom41pjJ4BBygf0r3S02mC2skg6f-DeHcXVjocVS0hGKmB9fEVxGNDQ3Yk_z3mM23UidmYSsyZQrHlUmMh-r0ySF_l32G5w-1uA/s72-c/1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-9181957453577662591</id><published>2012-08-10T17:32:00.000+08:00</published><updated>2012-08-13T09:53:22.639+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Adapter"/><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android Adapter家族系列(一) - Adapter(適配器)</title><content type='html'>&lt;a href=&quot;http://developer.android.com/reference/android/widget/Adapter.html&quot;&gt;Adapter(適配器)&amp;nbsp;&lt;/a&gt;&amp;nbsp;官方網站上有對它的一些類別概述：&lt;br /&gt;
&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;&quot;&gt;適配器對象作為&lt;/span&gt;&lt;code style=&quot;background-color: #f9f9f9; color: #006600; font-family: &#39;courier new&#39;, courier, monospace; font-size: 14px; font-weight: bold; line-height: 1.5;&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/AdapterView.html&quot; style=&quot;color: #258aaf; text-decoration: none;&quot;&gt;AdapterView&lt;/a&gt;&lt;/code&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;&quot;&gt;之間的一個橋樑，並為這一觀點的基礎數據。適配器提供的數據項的訪問。&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;適配器也作出負責的&lt;/span&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;數據集給每個項目。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
簡單的來說就是&lt;span style=&quot;color: red;&quot;&gt;資料和元件間溝通的橋樑&lt;/span&gt;，Adapter有以下幾種間接子類別：&lt;br /&gt;
&lt;a href=&quot;http://developer.android.com/reference/android/widget/ArrayAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;ArrayAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;&lt;t&gt;,&amp;nbsp;&lt;/t&gt;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/BaseAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;BaseAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;CursorAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;HeaderViewListAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/ListAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;ListAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;ResourceCursorAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/SimpleAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;SimpleAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;SimpleCursorAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/SpinnerAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;SpinnerAdapter&lt;/a&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://developer.android.com/reference/android/widget/WrapperListAdapter.html&quot; style=&quot;background-color: #f9f9f9; color: #258aaf; font-family: Roboto, sans-serif; font-size: 13px; line-height: 19px; text-decoration: none;&quot;&gt;WrapperListAdapter&lt;/a&gt; &lt;br /&gt;
這些子類別我們在後續章節再做各別的介紹。&lt;br /&gt;
&lt;br /&gt;
我們常會在ListView、Spinner...等看到這一類別，而且也必須使用到它&lt;br /&gt;
我們就來看它常用的公用方法：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 class=&quot;jd-details-title&quot; style=&quot;background-color: #e2e2e2; color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; line-height: 20px; margin: 1.5em 0px 0.6em; padding: 3px 95px 3px 3px;&quot;&gt;
&lt;span class=&quot;sympad&quot; style=&quot;margin-right: 2px;&quot;&gt;&lt;span class=&quot;&quot;&gt;getCount&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;normal&quot; style=&quot;font-weight: normal;&quot;&gt;（）&lt;/span&gt;&lt;/h4&gt;
How many items are in the data set represented by this Adapter.&lt;br /&gt;
適配器內的資料個數&lt;br /&gt;
&lt;br /&gt;
程式碼&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public &amp;nbsp;int getCount() {
&amp;nbsp; &amp;nbsp;return title.length;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 class=&quot;jd-details-title&quot; style=&quot;background-color: #e2e2e2; color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; line-height: 20px; margin: 1.5em 0px 0.6em; padding: 3px 95px 3px 3px;&quot;&gt;
&lt;span class=&quot;sympad&quot; style=&quot;margin-right: 2px;&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;GetItem&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;normal&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;（位置）&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;br /&gt;
Get the data item associated with the specified position in the data set.&lt;br /&gt;
獲取的數據在指定位置的數據集相關的項目。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
程式碼&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public Object getItem(int position) {
&amp;nbsp; return title[position];
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 class=&quot;jd-details-title&quot; style=&quot;background-color: #e2e2e2; color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; line-height: 20px; margin: 1.5em 0px 0.6em; padding: 3px 95px 3px 3px;&quot;&gt;
&lt;span class=&quot;sympad&quot; style=&quot;margin-right: 2px;&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;getItemId&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;normal&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;（int position）&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;br /&gt;
Get the row id associated with the specified position in the list.&lt;br /&gt;
&lt;br /&gt;
獲取的行ID列表中的指定位置。&lt;br /&gt;
&lt;br /&gt;
Parameters&lt;br /&gt;
position &amp;nbsp;The position of the item within the adapter&#39;s data set whose row id we want.&lt;br /&gt;
放置在適配器的數據集的行ID，我們希望該項目的位置。&lt;br /&gt;
&lt;br /&gt;
Returns&lt;br /&gt;
The id of the item at the specified position.&lt;br /&gt;
&lt;br /&gt;
返回指定位置編號的項目。&lt;br /&gt;
&lt;br /&gt;
程式碼&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public long getItemId(int position) {
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt; return position;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 class=&quot;jd-details-title&quot; style=&quot;background-color: #e2e2e2; color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; line-height: 20px; margin: 1.5em 0px 0.6em; padding: 3px 95px 3px 3px;&quot;&gt;
&lt;span class=&quot;sympad&quot; style=&quot;margin-right: 2px;&quot;&gt;&lt;span class=&quot;&quot;&gt;getItemViewType&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;normal&quot; style=&quot;font-weight: normal;&quot;&gt;（int position）&lt;/span&gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: arial; font-size: 13px; text-align: justify;&quot;&gt;Get the type of View that will be created by getView(int, View, ViewGroup) for the specified item.&lt;/span&gt; &lt;br /&gt;
&lt;span style=&quot;background-color: white; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #222222; font-family: arial; font-size: x-small;&quot;&gt;獲取&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: arial; font-size: x-small; text-align: justify;&quot;&gt;由getView（INT，查看，ViewGroup的）創建的視圖類型的&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; font-family: arial; font-size: x-small; text-align: justify;&quot;&gt;指定項目&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: arial; font-size: x-small; text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/span&gt; &lt;br /&gt;
&lt;h5 class=&quot;jd-tagtitle&quot; style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 1em; line-height: 19px; margin: 0px 0px 0.25em;&quot;&gt;
參數&lt;/h5&gt;
&lt;div&gt;
position &amp;nbsp;&lt;span style=&quot;background-color: #f9f9f9; color: #222222; font-family: Roboto, sans-serif; font-size: 14px; line-height: 19px;&quot;&gt;該項目內適配器的數據集，我們想要的視圖類型的位置&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
程式碼&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public int getItemViewType(int position) {
  return position ;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4 class=&quot;jd-details-title&quot; style=&quot;background-color: #e2e2e2; margin: 1.5em 0px 0.6em; padding: 3px 95px 3px 3px;&quot;&gt;
&lt;span class=&quot;sympad&quot; style=&quot;color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; line-height: 20px; margin-right: 2px;&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;getView&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;normal&quot;&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; color: #333333; font-family: Roboto, sans-serif; font-size: 1.15em; font-weight: normal; line-height: 20px; position: relative;&quot;&gt;（&lt;/span&gt;&lt;span class=&quot;goog-text-highlight&quot; style=&quot;-webkit-box-shadow: rgb(153, 153, 170) 2px 2px 4px; background-color: #c9d7f1; box-shadow: rgb(153, 153, 170) 2px 2px 4px; box-sizing: border-box; position: relative;&quot;&gt;&lt;span style=&quot;color: #333333; font-family: Roboto, sans-serif; font-size: medium;&quot;&gt;&lt;span style=&quot;font-weight: normal; line-height: 20px;&quot;&gt;int position, View convertView, ViewGroup parent&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: Roboto, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 1.15em; font-weight: normal; line-height: 20px;&quot;&gt;）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;jd-details-descr&quot;&gt;
&lt;div class=&quot;jd-tagdata jd-tagdescr&quot;&gt;
Get a View that displays the data at the specified position in the data set.  You can either create a View manually or inflate it from an XML layout file.  When the View is inflated, the parent View (GridView, ListView...) will apply  default layout parameters unless you use &lt;code&gt;&lt;a href=&quot;http://www.blogger.com/reference/android/view/LayoutInflater.html#inflate(int, android.view.ViewGroup, boolean)&quot;&gt;inflate(int,  android.view.ViewGroup, boolean)&lt;/a&gt;&lt;/code&gt; to specify a root view and to  prevent attachment to the root.&lt;/div&gt;
&lt;div class=&quot;jd-tagdata&quot;&gt;
&lt;h5 class=&quot;jd-tagtitle&quot;&gt;
得到一個視圖顯示在指定位置的數據集的數據。你可以手動創建一個視圖從一個XML佈局文件&lt;/h5&gt;
&lt;h5 class=&quot;jd-tagtitle&quot;&gt;
Parameters (參數)&lt;/h5&gt;
&lt;table class=&quot;jd-tagtable&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;position(位置)&lt;/th&gt;&lt;td&gt;The position of the item within the adapter&#39;s data set of the item whose  view we want.&lt;br /&gt;
進入此方法時是數據集的第幾個了，可做為需要不同項目產生不同資料時判別之用&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;th&gt;convertView  &lt;/th&gt;&lt;td&gt;The old view to reuse, if possible. Note: You should check that this view is  non-null and of an appropriate type before using. If it is not possible to  convert this view to display the correct data, this method can create a new  view. Heterogeneous lists can specify their number of view types, so that this  View is always of the right type (see &lt;code&gt;&lt;a href=&quot;http://www.blogger.com/reference/android/widget/Adapter.html#getViewTypeCount()&quot;&gt;getViewTypeCount()&lt;/a&gt;&lt;/code&gt;  and &lt;code&gt;&lt;a href=&quot;http://www.blogger.com/reference/android/widget/Adapter.html#getItemViewType(int)&quot;&gt;getItemViewType(int)&lt;/a&gt;&lt;/code&gt;).&lt;br /&gt;
簡單來說就是一個view的容器，可以引用新的XML佈局資料達到自定義佈局，再載入資料，最後回傳給需要的元件使用。&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;th&gt;parent  &lt;/th&gt;&lt;td&gt;The parent that this view will eventually be attached  to&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;jd-tagdata&quot;&gt;
&lt;h5 class=&quot;jd-tagtitle&quot;&gt;
Returns(返回)&lt;/h5&gt;
&lt;ul class=&quot;nolist&quot;&gt;
&lt;li&gt;A View corresponding to the data at the specified position. &amp;nbsp;&lt;/li&gt;
&lt;li&gt;查看相應的數據在指定的位置&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
程式碼&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;public View getView(int position, View convertView, ViewGroup parent) {

  //自訂類別，表達個別listItem中的view物件集合。
        ViewTag viewTag;

        if(convertView == null){
            //取得listItem容器 view
            convertView = myInflater.inflate(R.layout.adapter, null);
            
            //建構listItem內容view
            viewTag = new ViewTag(
            (ImageView)convertView.findViewById(R.id.MyAdapter_ImageView_icon),
            (TextView) convertView.findViewById(R.id.MyAdapter_TextView_title),
            (TextView) convertView.findViewById(R.id.MyAdapter_TextView_info)
             );
            
            //設置容器內容
            convertView.setTag(viewTag);
        }
        else{
            viewTag = (ViewTag) convertView.getTag();
        }
        
        //設定內容圖案
        switch(position){
            case 0:
                viewTag.icon.setBackgroundResource(R.drawable.taipei);
                break;
            case 1:
                viewTag.icon.setBackgroundResource(R.drawable.taichung);
                break;
            case 2:
                viewTag.icon.setBackgroundResource(R.drawable.kaohsiung);
                break;
        }
        
        //設定標題文字
        viewTag.title.setText(title[position]);
        //設定內容文字
        viewTag.info.setText(info[position]);
        
        return convertView;
 }
&lt;/pre&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
Adapter(適配器)還蠻常會看到的，因為如果想客製化介面元件的話，一般都需要用到Adapter(適配器)改變元件為自定義形式，最常用的就是BaseAdapter這個子類，一般形態ArrayAdapter也蠻常用的，不過ArrayAdapter都是用在沒什麼改變時調用，如果想自定義一般都會做用到BaseAdapter這個子類，後續我們再逐步介紹這兩個子類別，謝謝。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/9181957453577662591/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-adapter.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/9181957453577662591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/9181957453577662591'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-adapter-adapter.html' title='Android Adapter家族系列(一) - Adapter(適配器)'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-1948113802131938605</id><published>2012-08-10T09:36:00.000+08:00</published><updated>2012-08-10T09:36:19.278+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="工具"/><title type='text'>Android 工具 - 幫Eclipse 換程式碼顏色</title><content type='html'>開發Android一般都是Eclipse做為開發工具，但每次都看到相同的程式碼顏色還蠻無聊的&lt;br /&gt;
&lt;br /&gt;
某天我就上網找了一下看能不能改變一下程式碼的顏色換換心情也好，很幸運的也讓我&lt;br /&gt;
&lt;br /&gt;
找到了相關網站有在做這種事情，就讓我們來看看怎麼改變Eclipse的程式碼顏色吧!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
進入&lt;a href=&quot;http://eclipsecolorthemes.org/&quot; style=&quot;color: #483485; font-family: helvetica, arial, sans-serif; font-size: 20px;&quot;&gt;Eclipse Color Themes&lt;/a&gt;選擇你想改變的程式碼顏色 - 小弟我用的是&quot;Sunburst&quot;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguhNovXrtzlVLG6txLAGYQ8DkjuhnqF1CRLhUW4NHoCdq6XLl9xjnKnVDQjU4cFmZRq8Bt4QMK0xuMJowsoGBRTMtgNWzRRL2c0dRHgqPVKQGu1QY5gwCP6moZII4kiNlRMnIhU3Uj0fw/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;448&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguhNovXrtzlVLG6txLAGYQ8DkjuhnqF1CRLhUW4NHoCdq6XLl9xjnKnVDQjU4cFmZRq8Bt4QMK0xuMJowsoGBRTMtgNWzRRL2c0dRHgqPVKQGu1QY5gwCP6moZII4kiNlRMnIhU3Uj0fw/s640/1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
選取可以直接安裝的EPF檔下載它&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsSdRqURyZdqvKxG55n29SvEYTegPFuIiQM_0Zcz0k3zW01zxThebNOY8cY-oLjrv2dv0rymEbEIQ5sTtnxSFD8Cz3OT9U76Ad6kKbsUkdovIAT545JrdSmNmCi1U9WX93oBDvajp0JW8/s1600/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;388&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsSdRqURyZdqvKxG55n29SvEYTegPFuIiQM_0Zcz0k3zW01zxThebNOY8cY-oLjrv2dv0rymEbEIQ5sTtnxSFD8Cz3OT9U76Ad6kKbsUkdovIAT545JrdSmNmCi1U9WX93oBDvajp0JW8/s640/2.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
下載後會是一個epf檔&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgntkIBQiz8L5yN1R3X7lk6CBXQfLJL6F9z1HQTxomsVZDrt7XJLmpOiSurUtVKAuXqdU8QivDQBdt8sa08iZd6nhgjHde2z8CvkErUAMXgbVdChrg51_6jxjQzqUZM9yXMY7DcQIt2u4c/s1600/3.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;331&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgntkIBQiz8L5yN1R3X7lk6CBXQfLJL6F9z1HQTxomsVZDrt7XJLmpOiSurUtVKAuXqdU8QivDQBdt8sa08iZd6nhgjHde2z8CvkErUAMXgbVdChrg51_6jxjQzqUZM9yXMY7DcQIt2u4c/s400/3.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;進入Eclipse中匯入該檔，&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14px; line-height: 15px;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;] →[&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;Import&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;] →[&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;Gerneral&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;] →[&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;Preferences&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;] →[瀏覽剛才下載的檔案]&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8OQyoGPLJLLpjRVVtSAllYWxEIx9IBAmuUNwryM7uP-44EGWThlXAfISsQBj6THkfq-hKF0gr_YRtMYd1UDwCl3b_UIrK5A4uqcW5F9Zb_FJXswFbW8_wIjymkjZGALjaPlJLXQIXi2s/s1600/4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8OQyoGPLJLLpjRVVtSAllYWxEIx9IBAmuUNwryM7uP-44EGWThlXAfISsQBj6THkfq-hKF0gr_YRtMYd1UDwCl3b_UIrK5A4uqcW5F9Zb_FJXswFbW8_wIjymkjZGALjaPlJLXQIXi2s/s640/4.jpg&quot; width=&quot;610&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;選取剛剛的epf檔按下完成(Finish)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKGZwFZnp3bgbMHT44bEz5YzzLTrgRycMKZP5E4IgXKZpTZRedmMK6ByzMI0hcU4FzRLGBro_V6npFJlC3EvuoNwCregzudUeGX14aKLefrNb3xbRYpO1AFfM5FctXBt_EsGnnQwnanpY/s1600/5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKGZwFZnp3bgbMHT44bEz5YzzLTrgRycMKZP5E4IgXKZpTZRedmMK6ByzMI0hcU4FzRLGBro_V6npFJlC3EvuoNwCregzudUeGX14aKLefrNb3xbRYpO1AFfM5FctXBt_EsGnnQwnanpY/s640/5.jpg&quot; width=&quot;612&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;回來看看程式碼全變了&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgelX8WR8JKuzspLq1qQs79JV9qOEslWW1lpf8CeNKtWGMmCJNhjDYH-xDEUhQgOYALAy1G80lDrB1hWL7cmgqzYKtdVzSCOGvgoKnu-h43CILXxgyzVLTFeB8TXqt4EwmrF-r8C7BfJ7k/s1600/6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;506&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgelX8WR8JKuzspLq1qQs79JV9qOEslWW1lpf8CeNKtWGMmCJNhjDYH-xDEUhQgOYALAy1G80lDrB1hWL7cmgqzYKtdVzSCOGvgoKnu-h43CILXxgyzVLTFeB8TXqt4EwmrF-r8C7BfJ7k/s640/6.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;後記：&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;改變後順眼多了，整個心情也跟著變好(有點誇張!)，最少覺得不會那麼刺眼，不過要習慣新的&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;程式碼配色，像註解就變白了，一開始看會有點不習慣，不過久了就覺得還好了，而且每次看&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;到的程式碼顏色都一樣很無聊，所以有空可以改一下程式碼顏色也是蠻好玩的，分享給大家&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;謝謝。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #3e3e3e; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 15px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/1948113802131938605/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-eclipse.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1948113802131938605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/1948113802131938605'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-eclipse.html' title='Android 工具 - 幫Eclipse 換程式碼顏色'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguhNovXrtzlVLG6txLAGYQ8DkjuhnqF1CRLhUW4NHoCdq6XLl9xjnKnVDQjU4cFmZRq8Bt4QMK0xuMJowsoGBRTMtgNWzRRL2c0dRHgqPVKQGu1QY5gwCP6moZII4kiNlRMnIhU3Uj0fw/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-4322373885176425786</id><published>2012-08-08T11:44:00.003+08:00</published><updated>2013-02-18T13:32:43.423+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="intent"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android Activity、Intent系列(一) - 萬用的Intent(意圖)</title><content type='html'>一般人都知道Intent(意圖)是用來幫Activity傳遞參數用的，但如果你的觀念只停留在&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;Intent只能用來傳遞參數用&lt;/span&gt;那就大錯特錯了，下面介紹怎麼使用萬能的Intent幫我們&lt;br /&gt;
&lt;br /&gt;
簡單的就能做很多的事情了。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Activity跳轉-無參數時&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Intent it = new Intent(Activity1.this, Activity2.class);
startActivity(it); 

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Activity跳轉-有參數時&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString(&quot;ID&quot;, &quot;This is Activity1 message!&quot;);
it.putExtras(bundle);
startActivity(it);  

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;參數接取方的資料處理程式碼&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Bundle bundle=getIntent().getExtras();
String name=bundle.getString(&quot;ID&quot;);

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;向上一個Activity返回結果&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Intent intent=getIntent();
Bundle bundle=new Bundle();
bundle.putString(&quot;ID&quot;, &quot;This is from Activity2!&quot;);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;返回結果的處理函數&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==REQUEST_CODE){
            if(resultCode==RESULT_CANCELED)
                  setTitle(&quot;cancle&quot;);
            else if (resultCode==RESULT_OK) {
                 String temp=null;
                 Bundle bundle=data.getExtras();
                 if(bundle!=null)   temp=bundle.getString(&quot;ID&quot;);
                 setTitle(temp);
            }
        }
    }

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;瀏覽網頁&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Uri uri = Uri.parse(&quot;http://jim690701.blogspot.tw/&quot;);  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;顯示地圖&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//輸入經緯度座標呼叫地圖
Uri uri = Uri.parse(&quot;geo:38.899533,-77.036476&quot;);  
 Intent it = new Intent(Intent.ACTION_VIEW, uri);   
 startActivity(it); 

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;路徑規劃&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Uri uri = Uri.parse(&quot;http://maps.google.com/maps?f=d&amp;amp;saddr=startLat%20startLng&amp;amp;daddr=endLat%20endLng&amp;amp;hl=en&quot;);  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it); 

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;撥打電話&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//注意：使用撥號必須在AndroidManifest.xml 中，加上
//&amp;lt;uses-permission id=&quot;android.permission.CALL_PHONE&quot; /&amp;gt; 

//呼叫撥號程序
Uri uri = Uri.parse(&quot;tel:0800000123&quot;);  
Intent it = new Intent(Intent.ACTION_DIAL, uri);  
startActivity(it); 

//直接撥號
Uri uri = Uri.parse(&quot;tel:0800000123&quot;);  
Intent it = new Intent(Intent.ACTION_CALL, uri);  
startActivity(it);  

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;寄送SMS/MMS簡訊&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//呼叫簡訊程序 
   Intent it = new Intent(Intent.ACTION_VIEW, uri);  
   it.putExtra(&quot;sms_body&quot;, &quot;The SMS text&quot;);   
   it.setType(&quot;vnd.android-dir/mms-sms&quot;);  
   startActivity(it); 

   //傳送簡訊 
   Uri uri = Uri.parse(&quot;smsto://0800000123&quot;);  
   Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
   it.putExtra(&quot;sms_body&quot;, &quot;The SMS text&quot;);  
   startActivity(it); 

  //傳送MMS彩訊  
   //取得手機內圖片連結
   Uri uri = Uri.parse(&quot;content://media/external/images/media/23&quot;);  
   Intent it = new Intent(Intent.ACTION_SEND); 
   //簡訊主題  
   it.putExtra(&quot;sms_body&quot;, &quot;some text&quot;);   
   it.putExtra(Intent.EXTRA_STREAM, uri);  
   it.setType(&quot;image/png&quot;);   
   startActivity(it); 

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;傳送E-mail&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//呼叫mail程序
Uri uri = Uri.parse(&quot;mailto:xxx@abc.com&quot;);  
Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
startActivity(it); 


//簡易寄送E-mail
Intent it = new Intent(Intent.ACTION_SEND);  
it.putExtra(Intent.EXTRA_EMAIL, &quot;me@abc.com&quot;);  
it.putExtra(Intent.EXTRA_TEXT, &quot;The email body text&quot;);  
it.setType(&quot;text/plain&quot;);  
startActivity(Intent.createChooser(it, &quot;Choose Email Client&quot;)); 


//一般寄送E-mail
Intent it=new Intent(Intent.ACTION_SEND);    
String[] tos={&quot;me@abc.com&quot;};    
String[] ccs={&quot;you@abc.com&quot;};
//主要寄送對象    
it.putExtra(Intent.EXTRA_EMAIL, tos);    
//cc對象
it.putExtra(Intent.EXTRA_CC, ccs);    
//Email內容
it.putExtra(Intent.EXTRA_TEXT, &quot;The email body text&quot;);  
//Email主題  
it.putExtra(Intent.EXTRA_SUBJECT, &quot;The email subject text&quot;);    
it.setType(&quot;message/rfc822&quot;);    
startActivity(Intent.createChooser(it, &quot;選擇電子郵件客戶端&quot;));


//寄送附件
Intent it = new Intent(Intent.ACTION_SEND);  
//Email主題  
it.putExtra(Intent.EXTRA_SUBJECT, &quot;The email subject text&quot;); 
//附件 
it.putExtra(Intent.EXTRA_STREAM, &quot;file:///sdcard/mysong.mp3&quot;);
//檔案格式  
sendIntent.setType(&quot;audio/mp3&quot;);  
startActivity(Intent.createChooser(it, &quot;選擇電子郵件客戶端&quot;));


&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;播放多媒體&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//播放手機內的MP3
Uri uri = Uri.parse(&quot;file:///sdcard/song.mp3&quot;);  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
it.setType(&quot;audio/mp3&quot;);  
startActivity(it); 

//播放內存的第一個鈴聲
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, &quot;1&quot;);  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;google play應用&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//尋找某個應用
Uri uri = Uri.parse(&quot;https://play.google.com/store/search?q=jim.memorandum&quot;); 
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);  
//https://play.google.com/store/search?q=這段都一樣
//主要是q後面的搜尋條件，可以是package也可以是名稱


//顯示某個應用的相關信息 
Uri uri = Uri.parse(&quot;https://play.google.com/store/apps/details?id=jim.memorandum&quot;);  
Intent it = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(it);  
//https://play.google.com/store/apps/details?id=這段都一樣
//主要是id後面的package

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Uninstall應用程式&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;//反安裝必須知道package name
Uri uri = Uri.fromParts(&quot;package&quot;, strPackageName, null); 
Intent it = new Intent(Intent.ACTION_DELETE, uri);   
startActivity(it); 

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;讀取QR Code&lt;/span&gt;&lt;br /&gt;
叫用條碼掃描器&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;Intent intent = new Intent(&quot;com.google.zxing.client.android.SCAN&quot;);//開啟條碼掃描器
intent.putExtra(&quot;SCAN_MODE&quot;, &quot;QR_CODE_MODE&quot;);//設定QR Code參數
startActivityForResult(intent, 1);//要求回傳1，回傳值可以自由設定

&lt;/pre&gt;
&lt;br /&gt;
接收掃描後的回傳值&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // TODO Auto-generated method stub
 super.onActivityResult(requestCode, resultCode, data);
 
     if (requestCode == 1) { //startActivityForResult回傳值，回傳值是由叫用時帶入的設定
         if (resultCode == RESULT_OK) {
             String contents = data.getStringExtra(&quot;SCAN_RESULT&quot;);//取得QR Code內容
          txt_hello.setText(contents);//顯示儲存值
  }
            }
 }
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
看完以上的Intent應用是不是覺得Intent可以用到的地方還真不少吧&lt;br /&gt;
&lt;br /&gt;
我個人是覺得Intent超好用的需要什麼都可以用Intent去呼叫就好，&lt;br /&gt;
&lt;br /&gt;
簡單又能節省程式碼，以上是對萬用Intent的介紹，謝謝。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/4322373885176425786/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-activityintent-intent.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/4322373885176425786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/4322373885176425786'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-activityintent-intent.html' title='Android Activity、Intent系列(一) - 萬用的Intent(意圖)'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-295273644760742223</id><published>2012-08-07T10:25:00.000+08:00</published><updated>2012-08-07T10:25:09.934+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Image"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android Image應用(五) - 縮放、指定圖片大小</title><content type='html'>此篇要介紹的是如何縮放圖片，我們都知道圖片大小有時在呈現上讓我們不是那麼的滿意&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
或是讀取進來的圖片尺寸可能都有各式各樣的，這樣很容易破壞我們原來的版型，怎麼辦呢？&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
今天就介紹怎麼縮放圖片，讓圖片變大、變小、變成我們想要的。&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;
&amp;nbsp; &lt;span style=&quot;color: blue;&quot;&gt;為了讓讀者比較容易了解及讀取方便，所以我會故意把三個按鈕的處理程序都拆開來寫&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: blue;&quot;&gt;，而不是寫在一起，目的是為了易於讀取，不然用程序 + switch case寫在一起就好了&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;main.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:orientation=&quot;vertical&quot; &amp;gt;

    &amp;lt;RelativeLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot; &amp;gt;

        &amp;lt;ImageView
            android:id=&quot;@+id/imageView1&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_centerHorizontal=&quot;true&quot;
            android:src=&quot;@drawable/ic_launcher&quot; /&amp;gt;
    &amp;lt;/RelativeLayout&amp;gt;


    &amp;lt;RelativeLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot; &amp;gt;




        &amp;lt;Button
            android:id=&quot;@+id/btn_Center&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_centerHorizontal=&quot;true&quot;
            android:text=&quot;@string/button_center&quot; /&amp;gt;



        &amp;lt;Button
            android:id=&quot;@+id/btn_Right&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_marginLeft=&quot;30dp&quot;
            android:layout_toRightOf=&quot;@+id/btn_Center&quot;
            android:text=&quot;@string/button_right&quot; /&amp;gt;


        &amp;lt;Button
            android:id=&quot;@+id/btn_Left&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_marginRight=&quot;30dp&quot;
            android:layout_toLeftOf=&quot;@+id/btn_Center&quot;
            android:text=&quot;@string/button_left&quot; /&amp;gt;

    &amp;lt;/RelativeLayout&amp;gt;

&amp;lt;/LinearLayout&amp;gt;

&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;strings.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;resources&amp;gt;
    &amp;lt;string name=&quot;app_name&quot;&amp;gt;圖片縮放&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;button_left&quot;&amp;gt;放大&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;button_right&quot;&amp;gt;縮小&amp;lt;/string&amp;gt;
    &amp;lt;string name=&quot;button_center&quot;&amp;gt;變為480*480&amp;lt;/string&amp;gt;

&amp;lt;/resources&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;DemoZoomActivity.java&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package jim.demo.zoom;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class DemoZoomActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
         //圖片
        final ImageView imageView = (ImageView) findViewById(R.id.imageView1);
        
        //放大
        Button btnLeft = (Button)findViewById(R.id.btn_Left);
        //指定大小
        Button btnCenter = (Button)findViewById(R.id.btn_Center);
        //縮小
        Button btnRight = (Button)findViewById(R.id.btn_Right);
        
        
        //放大按鈕事件
        View.OnClickListener listener_left = new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				
				//imageView轉Bitmap
				  imageView.buildDrawingCache();
		          Bitmap bmp=imageView.getDrawingCache();
		        		
		        //轉換為圖片指定大小
	      	    //獲得圖片的寬高
	      	    int width = bmp.getWidth();
	      	    int height = bmp.getHeight();
	      	   
	      	    //放大為1.2倍
	      	    float scaleWidth = (float) 1.2;
	      	    float scaleHeight = (float) 1.2;
	      	    
	      	    // 取得想要缩放的matrix參數
	      	    Matrix matrix = new Matrix();
	      	    matrix.postScale(scaleWidth, scaleHeight);
	      	    // 得到新的圖片
	      	    Bitmap newbm = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix,true);
	      	    
	      	  //重新載入 imageView
	      	  imageView.setImageBitmap(newbm);
	          
			} 
        	
        };
        btnLeft.setOnClickListener(listener_left); 
        
        //指定大小按鈕事件
        View.OnClickListener listener_center = new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				
				//imageView轉Bitmap
				  imageView.buildDrawingCache();
		          Bitmap bmp=imageView.getDrawingCache();
		        		
		        //轉換為圖片指定大小
	      	    //獲得圖片的寬高
	      	    int width = bmp.getWidth();
	      	    int height = bmp.getHeight();
	      	    // 設置想要的大小
	      	    int newWidth = 480;
	      	    int newHeight = 480;
	      	    // 計算缩放比例
	      	    float scaleWidth = ((float) newWidth) / width;
	      	    float scaleHeight = ((float) newHeight) / height;
	      	    // 取得想要缩放的matrix參數
	      	    Matrix matrix = new Matrix();
	      	    matrix.postScale(scaleWidth, scaleHeight);
	      	    // 得到新的圖片
	      	    Bitmap newbm = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix,true);
	      	    
	      	  //重新載入 imageView
	      	  imageView.setImageBitmap(newbm);
	      	  
			} 
        	
        };
        btnCenter.setOnClickListener(listener_center); 
        
        //縮小按鈕事件
        View.OnClickListener listener_right = new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				
				//imageView轉Bitmap
				  imageView.buildDrawingCache();
		          Bitmap bmp=imageView.getDrawingCache();
		        		
		        //轉換為圖片指定大小
	      	    //獲得圖片的寬高
	      	    int width = bmp.getWidth();
	      	    int height = bmp.getHeight();
	      	   
	      	    //縮小為0.8倍
	      	    float scaleWidth = (float) 0.8;
	      	    float scaleHeight = (float) 0.8;
	      	    
	      	    // 取得想要缩放的matrix參數
	      	    Matrix matrix = new Matrix();
	      	    matrix.postScale(scaleWidth, scaleHeight);
	      	    // 得到新的圖片
	      	    Bitmap newbm = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix,true);
	      	    
	      	  //重新載入 imageView
	      	  imageView.setImageBitmap(newbm);
			} 
        	
        };
        btnRight.setOnClickListener(listener_right); 
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;執行畫面&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZmXLrrkAqLA92f06cOCZmBLXCLxZs-gf-JdFJqyx5l47YIwZvBItpUHlnq89wWkcrKo67WlpqD7HMEdslx1MY_3Iicy9o59TjrliR-2fapXuJsFgosLjdseDx10S54cpIoawc4BAZ0gk/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZmXLrrkAqLA92f06cOCZmBLXCLxZs-gf-JdFJqyx5l47YIwZvBItpUHlnq89wWkcrKo67WlpqD7HMEdslx1MY_3Iicy9o59TjrliR-2fapXuJsFgosLjdseDx10S54cpIoawc4BAZ0gk/s640/1.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVI42bu5vui_jx-mWJjfpziy57FAG-309yiNQcQ4hK9uSJZT-WKoHF2d-T8EYnKJP_g3ITbUUd7bngw3CCIHiTMjCRz-8tRLibB4fpIvxTadjzzqu4y033GbCWzEYx6AVX7khCt1Szrpo/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVI42bu5vui_jx-mWJjfpziy57FAG-309yiNQcQ4hK9uSJZT-WKoHF2d-T8EYnKJP_g3ITbUUd7bngw3CCIHiTMjCRz-8tRLibB4fpIvxTadjzzqu4y033GbCWzEYx6AVX7khCt1Szrpo/s640/2.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6fZ8Z_74Qx1I67zUc6fqNK2D_2rTXErBbvmNzMg3-f7HDc6cRl0a71m4OH0UmToyLEFM3kjNju5VABTYOZ4aMV9qexjlKm3vfCi3Rfk_xOuYQyXuLwF2zfs1S2LLKLE_Ps9HpKvdCaYU/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6fZ8Z_74Qx1I67zUc6fqNK2D_2rTXErBbvmNzMg3-f7HDc6cRl0a71m4OH0UmToyLEFM3kjNju5VABTYOZ4aMV9qexjlKm3vfCi3Rfk_xOuYQyXuLwF2zfs1S2LLKLE_Ps9HpKvdCaYU/s640/3.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72sIAxIhSy8FBAVfWjJoHIoyhqgOOCJghfA8L1poYgN8ublZxBRTMZ1sKtnXpbBjk6psHFtZKcJtry8kRslItd4WcKo30Q55P6swZ84lrB0q5ui23Lnd621DyRmfwB_VjODZtDouAGOo/s1600/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh72sIAxIhSy8FBAVfWjJoHIoyhqgOOCJghfA8L1poYgN8ublZxBRTMZ1sKtnXpbBjk6psHFtZKcJtry8kRslItd4WcKo30Q55P6swZ84lrB0q5ui23Lnd621DyRmfwB_VjODZtDouAGOo/s640/4.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 如果試著一直放大縮小你會發現一種現象：&quot;失真了&quot;，因為把小圖放的太大本來&lt;br /&gt;
&lt;br /&gt;
就會失真，所以最常用的是在讀取圖片後改變圖片比例到我們指定的大小，要不失真也&lt;br /&gt;
&lt;br /&gt;
行，請準備一張大圖，這樣就比較不會失真了，不然系統內的圖片就如同啟始畫面一樣&lt;br /&gt;
&lt;br /&gt;
小小一張而已，放大就會失真，這是圖片一定會有的狀況，謝謝收看。</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/295273644760742223/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-image.html#comment-form' title='7 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/295273644760742223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/295273644760742223'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-image.html' title='Android Image應用(五) - 縮放、指定圖片大小'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZmXLrrkAqLA92f06cOCZmBLXCLxZs-gf-JdFJqyx5l47YIwZvBItpUHlnq89wWkcrKo67WlpqD7HMEdslx1MY_3Iicy9o59TjrliR-2fapXuJsFgosLjdseDx10S54cpIoawc4BAZ0gk/s72-c/1.png" height="72" width="72"/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-9067633076922622383</id><published>2012-08-06T13:22:00.000+08:00</published><updated>2012-08-06T13:22:13.092+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="DisplayMetrics"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Android的DisplayMetrics類別應用 - 取得螢幕尺寸</title><content type='html'>Android一個最讓開發者頭大的問題，就是手機的螢幕尺寸太雜、大小太多&lt;br /&gt;
&lt;br /&gt;
造成開發者在開發應用程式上的難度，要兼顧每一個尺寸是讓人頗頭大&lt;br /&gt;
&lt;br /&gt;
現在介紹使用DisplayMetrics類別取得手機螢幕尺寸大小，以改變控制元件&lt;br /&gt;
&lt;br /&gt;
來配合螢幕尺寸。&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;main.xml&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;fill_parent&quot;
    android:layout_height=&quot;fill_parent&quot;
    android:orientation=&quot;vertical&quot; &amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/TextView01&quot;
        android:layout_width=&quot;fill_parent&quot;
        android:layout_height=&quot;wrap_content&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/editText1&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;300dp&quot;
        android:ems=&quot;10&quot;
        android:inputType=&quot;textMultiLine&quot;
        android:singleLine=&quot;false&quot; &amp;gt;

        &amp;lt;requestFocus /&amp;gt;

    &amp;lt;/EditText&amp;gt;

    &amp;lt;RelativeLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot; &amp;gt;

        &amp;lt;Button
            android:id=&quot;@+id/button2&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentRight=&quot;true&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_marginRight=&quot;60dp&quot;
            android:text=&quot;@android:string/cancel&quot; /&amp;gt;

        &amp;lt;Button
            android:id=&quot;@+id/button1&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_alignParentLeft=&quot;true&quot;
            android:layout_alignParentTop=&quot;true&quot;
            android:layout_marginLeft=&quot;60dp&quot;
            android:text=&quot;@android:string/ok&quot; /&amp;gt;

    &amp;lt;/RelativeLayout&amp;gt;

&amp;lt;/LinearLayout&amp;gt;

&lt;/pre&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;我先設定螢幕尺寸為2.7寸,中間EditText高度為300dp&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAU8-wuiHPDqy_HXl8IpI6NkpJrc_abhDnDn5By2dL9Z1FdxZnPHOxFpiHgkawehqCqYcXXxVU-w3rsfJsSVDlWciuYqJQmtT6QWyff_nvKOmq4J-IXafYVh-ITqS7emKQmxL0B7pmYQQ/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;492&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAU8-wuiHPDqy_HXl8IpI6NkpJrc_abhDnDn5By2dL9Z1FdxZnPHOxFpiHgkawehqCqYcXXxVU-w3rsfJsSVDlWciuYqJQmtT6QWyff_nvKOmq4J-IXafYVh-ITqS7emKQmxL0B7pmYQQ/s640/1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;執行後的畫面,因為實際螢幕比較大，所以程式小了一號&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBEIncevsckV6GbbZYbPaQ67s0fL7hmMRjCAUBuasIcOll2LEp9NZ6LOlsjzf2uU7w3uBwnp-tIPegVpFYpf2LFvb-5RR6r5OknA0COhV3_XN7KGj2KZTTb0N4qlnNGrCByUWRYx7X_sY/s1600/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBEIncevsckV6GbbZYbPaQ67s0fL7hmMRjCAUBuasIcOll2LEp9NZ6LOlsjzf2uU7w3uBwnp-tIPegVpFYpf2LFvb-5RR6r5OknA0COhV3_XN7KGj2KZTTb0N4qlnNGrCByUWRYx7X_sY/s640/2.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;使用DisplayMetrics類別取得螢幕尺寸大小改變控制項尺寸大小以符合實際螢幕大小&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;DemoGetScreenActivity.java&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;package jim.demo.getscreen;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.EditText;
import android.widget.TextView;

public class DemoGetScreenActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DisplayMetrics metrics = new DisplayMetrics();  
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        
        TextView TextView1 = (TextView)findViewById(R.id.TextView01);
        TextView1.setText(&quot;手機螢幕大小為 &quot;+metrics.widthPixels+&quot; X &quot;+metrics.heightPixels);
        
        
        EditText editText1 = (EditText)findViewById(R.id.editText1);
        
        //原QVGA 2.7吋螢幕解析度為240 * 320
        if(metrics.heightPixels &amp;gt; 320)
        {
        	//改變editText1的高度
        	editText1.getLayoutParams().height = 600;
        }
          
    }
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;改變後執行畫面&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWH-AtW60om4XK0GQdI1UjrxMyZR9SIgW1ZlinJbunshyeEZ8044igBDdSrI4lOklP1xBimDlivGjubtlRKmi4btfsPLovtUUGGDzxM55KKdniI2zfwiKXgRv08hDHEBhvfiTMBT-oPCA/s1600/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWH-AtW60om4XK0GQdI1UjrxMyZR9SIgW1ZlinJbunshyeEZ8044igBDdSrI4lOklP1xBimDlivGjubtlRKmi4btfsPLovtUUGGDzxM55KKdniI2zfwiKXgRv08hDHEBhvfiTMBT-oPCA/s640/3.png&quot; width=&quot;382&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;官方螢幕尺寸和解析度對照表&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sxu7i6MlWm_Y8GEUi4N42a37z_HgRLmypW4tjlZOctJx6h9M5rtYXhaR_MgF9x4QJ71PHirnbDpWaKtS_s4cAHXKZkCCUMVnsBvSwyMVPBgYt2PfUIpJk5obPTvWbZJ8_lc1UVDkpkk/s1600/4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;272&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_sxu7i6MlWm_Y8GEUi4N42a37z_HgRLmypW4tjlZOctJx6h9M5rtYXhaR_MgF9x4QJ71PHirnbDpWaKtS_s4cAHXKZkCCUMVnsBvSwyMVPBgYt2PfUIpJk5obPTvWbZJ8_lc1UVDkpkk/s640/4.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android的螢幕尺寸是個很麻煩的問題，因為不像Apple的iphone一樣只有單一尺寸&lt;br /&gt;
&lt;br /&gt;
每一家Android廠商就有不同的尺寸，所以開發時就只有靠著DisplayMetrics抓取的螢幕&lt;br /&gt;
&lt;br /&gt;
尺寸來做適度的調整，正常來說抓最小尺寸(QVGA)、大尺寸(WVGA)、平板尺寸(WXGA)&lt;br /&gt;
&lt;br /&gt;
三種來做測試就好，只要不會出現按不到鈕的情況就可以了，不然要寫完整的全部尺寸&lt;br /&gt;
&lt;br /&gt;
調整是要花費不少時間的，以上給大家參考，感謝。&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/9067633076922622383/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/androiddisplaymetrics.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/9067633076922622383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/9067633076922622383'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/androiddisplaymetrics.html' title='Android的DisplayMetrics類別應用 - 取得螢幕尺寸'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAU8-wuiHPDqy_HXl8IpI6NkpJrc_abhDnDn5By2dL9Z1FdxZnPHOxFpiHgkawehqCqYcXXxVU-w3rsfJsSVDlWciuYqJQmtT6QWyff_nvKOmq4J-IXafYVh-ITqS7emKQmxL0B7pmYQQ/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-5605090572997509643</id><published>2012-08-06T10:19:00.000+08:00</published><updated>2012-08-06T10:19:05.415+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><category scheme="http://www.blogger.com/atom/ns#" term="sqlite"/><title type='text'>Android 手機資料庫(五) - SQLite之資料庫更新說明篇</title><content type='html'>&lt;br /&gt;
如果你對資料庫還完全陌生，請參考之前的三篇文章(&lt;a href=&quot;http://jim690701.blogspot.tw/2012/06/android-sqlite.html&quot;&gt;第一篇&lt;/a&gt;、&lt;a href=&quot;http://jim690701.blogspot.tw/2012/07/android-sqlite.html&quot;&gt;第二篇&lt;/a&gt;、&lt;a href=&quot;http://jim690701.blogspot.tw/2012/07/android-sqliteonupgrade.html&quot;&gt;第三篇&lt;/a&gt;) &lt;br /&gt;
&lt;br /&gt;
因為很多人都不了解Android的資料庫更新應該怎麼做，所以在此寫一篇說明文好了&lt;br /&gt;
&lt;br /&gt;
希望不了解的人看完之後能比較有所了解，下面開始解釋：&lt;br /&gt;
&lt;br /&gt;
先貼上資料庫的程式碼，裡面當然也包含一般更新資料庫(onUpgrade)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;程式碼&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class NewListDataSQL extends SQLiteOpenHelper {

  private static final int VERSION = 3;//資料庫版本  
  
  public NewListDataSQL(Context context, String name, CursorFactory factory,int version) { //建構子
   super(context, name, factory, version);
  }

  public NewListDataSQL(Context context,String name) { 
   this(context, name, null, VERSION); 
   } 
  
   public NewListDataSQL(Context context, String name, int version) {  
    this(context, name, null, version);  
      }  
   
  //輔助類建立時運行該方法
  @Override
  public void onCreate(SQLiteDatabase db) {
   String DATABASE_CREATE_TABLE =
     &quot;create table newMemorandum(&quot;
       + &quot;_ID INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL,&quot;
             + &quot;date VARCHAR,&quot;
             + &quot;note VARCHAR,&quot;
             + &quot;pw VARCHAR,&quot;
             + &quot;reminder INT,&quot;
             + &quot;type VARCHAR,&quot;
             + &quot;memo VARCHAR&quot;
         + &quot;)&quot;;
            db.execSQL(DATABASE_CREATE_TABLE);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   //oldVersion=舊的資料庫版本；newVersion=新的資料庫版本
     //db.execSQL(&quot;DROP TABLE IF EXISTS newMemorandum&quot;); //刪除舊有的資料表
     //onCreate(db);
   
   
   if (newVersion &amp;gt; oldVersion) {
       db.beginTransaction();
    
       boolean success = true;
       
         
         switch (oldVersion) {
           case 2:           
            
            Cursor cursor = db.rawQuery(&quot;select _ID,date from newMemorandum&quot;, null);
            int[] iID = new int[cursor.getCount()];
            String[] sDate = new String[cursor.getCount()];
            
            int rows_num = cursor.getCount(); //取得資料表列數
            
            if(rows_num != 0) {
            cursor.moveToFirst();   //將指標移至第一筆資料
            for(int i=0; i&amp;lt;rows_num; i++) {
             int iCr = cursor.getInt(0);
             String strCr = cursor.getString(1);
             iID[i]=iCr;
             sDate[i]=strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[0] + &quot;/&quot; + String.valueOf(Integer.valueOf(strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[1])) + &quot;/&quot; + String.valueOf(Integer.valueOf(strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[2])) + &quot; &quot; + strCr.split(&quot; &quot;)[2];
             
             //因為日期格式有變，所以重新更新
             //格式改為2012/6/6 12:02
             ContentValues cv = new ContentValues();
             cv.put(&quot;date&quot;, sDate[i]);
             
             db.update(&quot;newMemorandum&quot;, cv, &quot;_ID=&quot; + iID[i], null);
             
             cv = null;//消滅物件
             
             
             cursor.moveToNext();  //將指標移至下一筆資料
            }
           }
           cursor.close();  //關閉Cursor
            
           
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN reminder integer DEFAULT 0&quot;);
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN type VARCHAR&quot;);
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN memo VARCHAR&quot;);
            oldVersion++;
            
               success = true;
             break;
           case 1:
                        
            Cursor cursor2 = db.rawQuery(&quot;select _ID,date from newMemorandum&quot;, null);
            int[] iID2 = new int[cursor2.getCount()];
            String[] sDate2 = new String[cursor2.getCount()];
            
            int rows_num2 = cursor2.getCount(); //取得資料表列數
            
            if(rows_num2 != 0) {
             cursor2.moveToFirst();   //將指標移至第一筆資料
            for(int j=0; j&amp;lt;rows_num2; j++) {
             int iCr2 = cursor2.getInt(0);
             String strCr = cursor2.getString(1);
             iID2[j]=iCr2;
             sDate2[j]=strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[0] + &quot;/&quot; + String.valueOf(Integer.valueOf(strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[1])) + &quot;/&quot; + String.valueOf(Integer.valueOf(strCr.split(&quot; &quot;)[0].split(&quot;/&quot;)[2])) + &quot; &quot; + strCr.split(&quot; &quot;)[2];
             
             //因為日期格式有變，所以重新更新
             //格式改為2012/6/6 12:02
             ContentValues cv2 = new ContentValues();
             cv2.put(&quot;date&quot;, sDate2[j]);
             
             db.update(&quot;newMemorandum&quot;, cv2, &quot;_ID=&quot; + iID2[j], null);
             
             cv2 = null;//消滅物件
             
             
             cursor2.moveToNext();  //將指標移至下一筆資料
            }
           }
            cursor2.close();  //關閉Cursor
           
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN pw VARCHAR&quot;);
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN reminder integer DEFAULT 0&quot;);
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN type VARCHAR&quot;);
            db.execSQL(&quot;ALTER TABLE newMemorandum ADD COLUMN memo VARCHAR&quot;);
            oldVersion = 3;
               success = true;
             break;
         }
           
    
       if (success) {
         db.setTransactionSuccessful();
       }
       db.endTransaction();
     }
     else {
       onCreate(db);
     }
   
  }
  
  @Override    
   public void onOpen(SQLiteDatabase db) {     
           super.onOpen(db);       
           // TODO 每次成功打開數據庫後首先被執行     
       } 

   @Override
        public synchronized void close() {
            super.close();
            // TODO 每次關閉數據庫後被執行     
        }
}

&lt;/pre&gt;
&lt;br /&gt;
說明：&lt;br /&gt;
&lt;br /&gt;
此為資料庫SQLiteOpenHelper類的程式碼，幾個地方分析&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;1.資料庫的執行方式 &amp;nbsp;&lt;/span&gt;&lt;br /&gt;
當系統要new出SQLiteOpenHelper類時，會先去找應用程式的DB資料夾下是否有該資料庫&lt;br /&gt;
如果沒有就執行建構子及onCreate建構該類別&lt;br /&gt;
如果有就執行onUpgrade更新資料庫&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;2.private static final int VERSION = 3;//資料庫版本 &amp;nbsp;&lt;span style=&quot;color: red;&quot;&gt;代表的意義與作用&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
(1)如果手機中沒有該應用程式，也等於沒有該資料庫(因為資料庫是獨立個體)&lt;br /&gt;
就會執行建構子構建該資料庫，建構子會帶入此VERSION，也就是從第3版開始&lt;br /&gt;
之後的更新也是從第4版開始，不能再回到第1版開始。&lt;br /&gt;
&lt;br /&gt;
(2)如果有資料庫就會跳到onUpgrade事件中&lt;br /&gt;
oldVersion=舊的資料庫版本&lt;br /&gt;
newVersion=新的資料庫版本&lt;br /&gt;
這兩個是怎麼出現的呢？&lt;br /&gt;
在要更新資料庫時，您之前的VERSION一定是寫成這樣VERSION = 2&lt;br /&gt;
VERSION = 2 就是 &amp;nbsp;=&amp;nbsp;oldVersion&lt;br /&gt;
程式有修改時，資料庫也有修改，這時也會把VERSION改為VERSION = 3&lt;br /&gt;
VERSION = 3 就是 =&amp;nbsp;newVersion&lt;br /&gt;
當你更新資料庫時，程式判別出VERSION = 3比之前的VERSION = 2大時&lt;br /&gt;
就會自動跳到onUpgrade事件中，帶入oldVersion=2、newVersion=3&lt;br /&gt;
當然你的舊版也可能是VERSION = 1(因為沒有即時更新)&lt;br /&gt;
程式還是會帶入oldVersion=1、newVersion=3&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;3.onUpgrade資料庫更新&lt;/span&gt;&lt;br /&gt;
(1)當我們了解了程式是怎麼判別資料庫更新後，再來看資料庫是怎麼更新的&lt;br /&gt;
因為舊版本可能不一樣，有可能最新版是第3版，舊版有1、2兩版&lt;br /&gt;
所以這裡可以針對不同版本做不同的更新動作，因為各版更新的都不同&lt;br /&gt;
所以可以用switch case分開各版本再對各版本做不同的更新動作(如上面程式碼)&lt;br /&gt;
&lt;br /&gt;
(2)更新資料庫不止可以下ALTER的SQL指令而已，因為資料本身是存在的&lt;br /&gt;
只要不下Drop，所以可以用Cursor cursor = db.rawQuery把資料撈出來做變更&lt;br /&gt;
我個人是把資料撈出來做日期格式的變更，最後再下ALTER新增欄位&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;注意看程式碼中1版是ALTER了4個欄位，2版是ALTER了3個欄位&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;所以如果你是放上google play上是要針對每個版本做不同的更新&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;因為你不知道下載者有沒有即時去更新你的應用程式，所以基本上要保留資料&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;就要這樣寫把之前的版本做不同的更新，這樣才能確保每一個版本都能更新&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: red;&quot;&gt;到最新的版本而不會出錯。&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
以上說明希望能幫助你對Android的資料庫有了進一步的了解，謝謝。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/5605090572997509643/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-sqlite.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5605090572997509643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/5605090572997509643'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/android-sqlite.html' title='Android 手機資料庫(五) - SQLite之資料庫更新說明篇'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1255559226214186422.post-2459695458492119366</id><published>2012-08-03T10:30:00.000+08:00</published><updated>2012-08-03T10:37:19.168+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="app"/><category scheme="http://www.blogger.com/atom/ns#" term="Image"/><category scheme="http://www.blogger.com/atom/ns#" term="Native app"/><title type='text'>Bitmap、Drawable、byte的轉換</title><content type='html'>當寫到圖片的處理時，比較常會遇到的是這三種圖片型態的轉換&lt;br /&gt;
&lt;br /&gt;
所以就來介紹一下這三種資料型態該怎麼轉換。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;Bitmap 轉 Drawable&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
Drawable drawable = new BitmapDrawable(Bitmap);

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;Drawable 轉 Bitmap&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
Drawable oDrawable = xxx; //xxx根據自己的情況獲取drawable
BitmapDrawable BD = (BitmapDrawable) oDrawable;
Bitmap BM = BD.getBitmap();

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;實體路徑圖片檔 轉 Drawable&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
//這句一定要在onCreate()里面調用
File tempFile = = new File(&quot;/sdcard/a.jpg&quot;);

Drawable drawable = Drawable.createFromPath(tempFile.getAbsolutePath());

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;從res\drawable中取出內存圖片為Bitmap&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
Resources res=getResources();

Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.ic_launcher); 
 
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;imageView 轉 Bitmap&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
  //圖片
  ImageView imageView_save = (ImageView) findViewById(R.id.img_newphoto);

  //imageView轉Bitmap
  imageView_save.buildDrawingCache();
  Bitmap bmp=imageView_save.getDrawingCache();

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: medium;&quot;&gt;bitmap 轉 byte&lt;/span&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:java&quot;&gt;
  Bitmap newbm;

  // 把 bitmap 轉成 byte
  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  newbm.compress(Bitmap.CompressFormat.JPEG, 100, stream );
  byte bytes[] = stream.toByteArray();

&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
後記：&lt;br /&gt;
&lt;br /&gt;
這是我常用到的轉換，還蠻實用的，所以PO出來給需要的人參考，謝謝。&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://jim690701.blogspot.com/feeds/2459695458492119366/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://jim690701.blogspot.com/2012/08/bitmapdrawablebyte.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/2459695458492119366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1255559226214186422/posts/default/2459695458492119366'/><link rel='alternate' type='text/html' href='http://jim690701.blogspot.com/2012/08/bitmapdrawablebyte.html' title='Bitmap、Drawable、byte的轉換'/><author><name>宅D嘉</name><uri>http://www.blogger.com/profile/03775582773274914380</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0tvWxqGkuUEYgqK5CzqMnsAXhixPlNj4fdFsmoNtB2D03Zq0qTskb7TBV4qTijZljbFYdCaal4O2TFdvNgatJdK-fGRSJvLGmuHN6gh7nsT8GR9x9BQ6g1iHHy_jPZw/s113/%E5%8D%A1%E9%80%9ALogo.jpg'/></author><thr:total>0</thr:total></entry></feed>