highlight.js

星期四, 1月 03, 2013

讓 Android 模擬器顯示虛擬按鈕

Android 的模擬器在小尺寸的設定時, 預設都是假設裝置是有 home、menu、back 這些硬體按鈕, 如果你要測試一些 Android 3.0 之後的功能, 像是在 action bar 顯示功能選單, 就會因為預設的設定而不會出現在 action bar 中, 仍然是從螢幕下方滑出來。如果要設定成沒有這些硬體按鈕的裝置, 就必須手動更改模擬器的設定檔。

首先啟動 Android Virtual Device Manager, 會在上方看到模擬器的資料存放的資料夾:


在該資料夾中, 每個模擬器都會以模擬器的名字建立專屬的資料夾。在個別模擬器的資料夾中, 有個 config.ini 檔, 就是有關該模擬器的基本設定:


開啟 config.ini 檔, 找到以下這行:
hw.mainKeys=yes
把設定值改為 no, 存檔後再重新啟動模擬器, 就可以看到模擬器顯示虛擬的按鈕了:




星期五, 12月 07, 2012

.NET SortedList 存放同樣 key 的物件

今天遇到使用 SortedList 時產生例外, 抱怨 key 相同, 這時我才注意到, 原來 SortedList 不能存放相同 key 的物件。不過其實嚴格來說, 並不是 key 相同就不能存放, 而是預設的比較器是很正規的比較, 當兩個比較對象相同時, 就會傳回 0, 而 SortedList 就會抱怨 key 相同, 產生例外。

根據上述, 解決方案其實很簡單, 就是自己實作一個只會傳回 1 與 -1 的比較器, 在建構 SortedList 時傳入, 這樣即使 key 相同也可以存入。比較器的實作非常簡單, 可參考這一篇討論串中一樓的解答:


class MyComparer : IComparer
{

  public int Compare(int x, int y)
  {
    if (x < y)
      return -1;
    else return 1;
  }
}
非常簡單。

星期三, 12月 05, 2012

修改 Visual Studio 專案檔的儲存資料夾

我因為常常製作一些功能相近的小程式, 所以都會拿現有的專案複製之後修改, 不過這樣一來, 會遺留許多就專案的痕跡, 自己看了也很不舒服。其中, 有許多設定, 像是專案名稱、組件名稱、命名空間等等都可以在 Visual Studio 裡頭直接修改, 只有儲存的資料夾必須自己手動修改。

對於專案最外層的資料夾, 也就是儲存有 .sln 檔的資料夾, 可以隨意更改名稱, 但是裡層的資料夾 (預設與外層同名), 就必須在修改名稱之後, 再以文字編輯器開啟 .sln 檔, 將其中的資料夾對應到新的名稱才行。例如我有一個叫做 WinTCPTest 的專案:


若想更改紅色框的資料夾名稱, 就要使用文字編輯器修改 WinTcpTest.sln 檔:

只要將 Project 段落中的資料夾名稱改為新的資料夾即可。

星期六, 12月 01, 2012

Xcode 4.5 中 UIDatePicker 在重新開啟專案後寬度莫名其妙變成 480

自從 Xcode 4.5 預設啟用 autolayout 功能後, 許多地方若是沒注意, 就會出現靈異現象。今天我自己遇到的狀況就是在準備送印一本日文翻譯書之前, 整理要附贈的範例光碟, 發現有個介紹 UIDatePicker 的範例開啟後, UIDatePicker 的寬度就莫名其妙變成 480, 超出了 iPhone 預設的 320。

於是我做了個簡單的實驗, 建立一個 Single Page 樣板的專案, 在 Storyboard 中放置一個 UIDatePicker, 如下:
這時即使甚麼事情都不做, 立刻關閉專案, 之後再重新開啟專案, 就會看到 storyboard 的內容變成這樣:
你可以看到 UIDatePicker 突然變寬了, 如果從尺寸檢視面板查看, 會發現寬度變成了 480。不過如果你執行這個程式, 看起來又很正常:
如果一開始建好專案時, 就先把 autolayout 功能取消, 就不會有這樣的問題。目前我也還不知道到底是哪裡出錯?即使啟用 autolayout, 我看了 UIDatePicker 的 constrain 也都沒有甚麼問題, 使用 Xcode 4.5.1、4.5.2 (以及朋友在 4.6) 上都會有一樣的情況, 若您知道問題的癥結, 也請告訴我, 謝謝。

PS:之前我也遇到過 UIView 動畫在 autolayout 啟用時, 使用 center 屬性變更畫面上元件的位置會跑到錯的位置上, 顯然 autolayout 真是值得大家好好研究一番啊!

星期二, 11月 27, 2012

Android 模擬器 Skin 設成 WXGA720 就跑不起來?

Android 模擬器一直是大家詬病的工具, 除了跑得很慢以外, 還回到一些奇奇怪怪的問題, 像是網路上許多人都發生過, 只要把 Android 模擬器設定為 Skin 使用 WXGA720, 像是這樣:

結果一起動模擬器就會出現配置記憶體錯誤, 終止執行。看了各路人馬的補救方案後, 我自己最後要這樣才能跑來, 一是改為自訂解析度 720X1280, 另外則是要很無俚頭的把 Hardware 中 Device ram size 的 1024 加上 mb 字尾, 像是這樣:
就可以執行了。至於原因嘛, 我真的不懂, 但至少這樣可以測試程式了。

星期三, 11月 14, 2012

在 Windows Forms 程式中取得組建檔的版本編號

剛剛想要在視窗的標題列顯示程式的版本號碼 (設定在組建檔的版本編號), 找了許久, 最簡單的應該就是從這裡看到的解答:
this.GetType().Assembly.GetName().Version.ToString ();
當然, 從 GetName() 傳回的物件還可以取得其他與組件檔案相關的資訊可供使用, 需要的可以自己看一下文件囉。

星期四, 11月 01, 2012

Mac 上的免費螢幕抓圖軟體 InstantShot!

因為最近在處理一本 iOS 程式設計的書籍, 因此常常會需要抓取 Mac 螢幕畫面, 經過搜尋與試用後, 發現 InstantShot! 應該是我所能找到的免費軟體中最好用的。主要功能如下:

  • 支援存檔格式:tiff, jpg,png。
  • 擷取模式:全螢幕、區域、視窗 (可指定抓取視窗上的元件, 像是單獨的按鈕等等)。
  • 可完全自定快捷按鍵。
  • 有定時擷取功能, 可以設定等候指定秒數後才抓圖畫面, 也可以以固定時間間隔重複抓取多次畫面。
  • 可以抓取滑鼠游標。
  • 可以自訂儲存圖檔的資料夾, 客製化檔名。
其他還有一些我沒用到的細部功能, 就不贅述, 可自行參考網頁上的說明。雖然在啟動截圖時, 螢幕上會顯示說明, 不過我建議還是好好讀過網頁上的說明會比較好, 不然可能有些功能一開始會不知道該怎麼操作。