Holidaybear's
2014/12/09
Google Play services 6.5: Selectively compiling APIs
Google Play services 升上 6.5 之後,其中一個特色就是多了
阿文的次元
切割功能,現在終於可以不用將整包 Google Play services 納入只為了使用其中幾種 API。舉例來說,之前為了支援 GCM 跟 Cast,我必須在 build.gradle 寫入:
現在我可以選擇性的只加入我需要的:
這樣就可以有效避免 method 數量超過 65,536 個上限的問題。
Reference:
http://android-developers.blogspot.tw/2014/11/google-play-services-65.html
http://developer.android.com/google/play-services/setup.html
2014/08/12
Cast menu, while casting
前陣子在看
Google Cast Design Checklist
的時候,他推薦當你正在投射螢幕時,可以在 cast menu 上實作一些細節及簡單的功能操作,不過在
Android Sender App Development
沒有看到關於這方面的補充,所以好奇去翻了一下要如何做出這樣的效果,最後發現只要在
MediaRouteActionProvider
加上自訂的
MediaRouteControllerDialog
就可以了。
於是參考這張圖練習寫了個 sample :D
2014/07/31
Playing HTML5 video on fullscreen in Android WebView
Android WebView 如果碰到 HTML5 的 <video> tag 時,雖然可以正常播放影片,但是點選 fullscreen 卻沒有反應。目前找到的解法是先到 AndroidManifest,在要播放影片的那一面加上 HardwareAccelerate,
接著覆寫
WebChromeClient
的 Method:
onShowCustomView
,
onHideCustomView
主要目的是在 onShowCustomView 時,將得到的 View 放到最上層;在 onHideCustomView 時把剛才的 View 移掉,將原本的 WebView 放回來。
Reference:
Android Webview app won't let video player go full screen
2014/06/25
.gitignore
最近同事不小心將 project 的 .idea 設定 commit 了,我才認真思考了一下要如何避免這種問題,為什麼我們在 .gitignore 忽略了 .idea 也沒效果,那是因為我們在那之前有先將 .idea push 上去過才會發生這種無法忽略的情況。於是我翻了一下 Google 在 GitHub 上的 Android project,參考了他們的 .gitignore
接下來我們還需要移除在 GitHub repo 上不需要的檔案,以 .idea 為例,
這樣以後這些非必要檔案就不會再出現在異動清單中,造成 commit 手誤了。
另外還可以參考 .gitignore 產生器:
gitignore.io
2014/05/19
Complete Android Fragment & Activity Lifecycle
Reference:
android-lifecycle (GitHub project)
2014/05/10
Save ArrayList to SharedPreferences
如果我們想要將 ArrayList 物件儲存到
SharedPreferences
裡,該如何做呢?
在 API level 11 之後,可以利用 Set 達到目的。
但如果需要同時支援以下的版本,可以對 ArrayList 做 serialize 及 de-serialize 後存取,
這裡使用到了
ObjectSerializer (Apache Pig project)
,下面是稍作修改的版本。
Reference:
Save ArrayList to SharedPreferences
2014/05/09
Random print "hello world"
Reference:
Why does this code using random strings print "hello world" ?
2014/04/17
View.isInEditMode()
今天參加 Android 高雄開發者社群聚會,聽到了一個好用的 method,當你在使用自己的 Custom View 時,常會碰到無法在 GUI Design 的介面中正常顯示的問題,並且會看到下面這段提示,
Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE
因為預覽時只會根據 xml layout 建立物件但不會初始化,所以 context 會是 null,這時只要在會用到 context 的地方運用這個 method,就可以正常顯示 UI 了。
2014/04/11
Intent.createChooser()
當你要發送 Intent 給外部可以處理的 app 去接收的時候,會跳出一個給你選擇的 Dialog,但是下方有兩個確認的選項,如果選擇了「一律採用」,之後想選擇別的方式還得先去 Settings 清掉紀錄。這時我們可以使用 Intent.createChooser() 來改善,以發 mail 為例:
之後便會每次都跳出可供選擇的 app 列表,而不會有記錄動作的選項了。
2014/04/07
ListView android:overScrollMode
今天碰到一個 UI 設計是將 ListView 融入在背景裡,但當你把 ListView 之類的元件 scroll 到最頂或最底時,都會出現 Android 預設的藍色陰影提示,查了一下,如果想要移除這個區塊,可以在 XML 裡加上:
或是在程式中加上:
另外如果想要修改這塊陰影的顏色,可以參考
EdgeEffectOverride
,利用
ContextWrapper
設定想要的主題配置。
2014/04/01
Abstract class 和 interface 的差異
關於這個問題,Google 就可以知道很多相關知識,但之前談到,要如何用自己的口語解釋給對方知道,於是我想了想,決定嘗試這樣解釋並紀錄一下(?)
Abstract class 就像是天賦,interface 就像是技能。
假設主角是黑魔法師,當初也是從法師學徒轉職而來的,所以會擁有魔力值、回復魔力值這些共通的基礎天賦,我們便可以先在 Abstract class 定義。
主角職業:
有了職業後,就可以來使用 interface 設計專屬技能了。
火系技能:
主角修習攻擊系法術:
之後魔王如果也被設定要會施放火系法術,那只要也實作 (implements) 這項介面,便可得到這項能力了 :P
Mac OS X 加入 adb 指令
前陣子不少同事換用 Mac OS X 來開發 Android,第一步通常會想做一件事,
就是將上列指令先寫入 .bashrc 裡,以便之後都能直接使用 adb 指令,但是重開 terminal 後,會發現設定並沒有被執行。原因可以參考:
.bash_profile vs .bashrc
,由此可知 Mac OS X 總是執行 .bash_profile,所以我們可以在它裡面補上
接下來就可以順利使用 adb 指令了 :D
較新的文章
首頁
訂閱:
文章 (Atom)