http://www.vogella.com/articles/Android/article.html
當然, 係好長的一版
Showing posts with label 開發. Show all posts
Showing posts with label 開發. Show all posts
Tuesday, November 27, 2012
Monday, September 24, 2012
增加按鈕可按面積
在設計 ui 時侯因為要遷就版面, 有時按鈕被迫佔用較少位置, 手指頭大的用家當然會按得較吃力, 解決方法好簡單, 使用 TouchDelegates 增大可按面積就可以了:
以下 example 來自: http://www.thomas-manthey.net/2012/03/04/android-basics-using-touchdelegates/
使用方法:
將 getTouchDelegateAction 放入自己常用 library, 以後按需要直接使用, 紅黑紅紅黑, 就係咁簡單.
以下 example 來自: http://www.thomas-manthey.net/2012/03/04/android-basics-using-touchdelegates/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /** * Adds a touchable padding around a View by constructing a TouchDelegate * and adding it to parent View. * @param parent The "outer" parent View * @param delegate The delegate that handles the TouchEvents * @param topPadding Additional touch area in pixels above View * @param bootomPadding Additional touch area in pixels below View * @param topPadding Additional touch area in pixels left to View * @param topPadding Additional touch area in pixels right to View * @return A runnable that you can post as action to a Views event queue */ private static Runnable getTouchDelegateAction(final View parent, final View delegate, final int topPadding, final int bottomPadding, final int leftPadding, final int rightPadding) { return new Runnable() { @Override public void run() { //Construct a new Rectangle and let the Delegate set its values Rect touchRect = new Rect(); delegate.getHitRect(touchRect); //Modify the dimensions of the Rectangle //Padding values below zero are replaced by zeros touchRect.top-=Math.max(0, topPadding); touchRect.bottom+=Math.max(0, bottomPadding); touchRect.left-=Math.max(0, leftPadding); touchRect.right+=Math.max(0, rightPadding); //Now we are going to construct the TouchDelegate TouchDelegate touchDelegate = new TouchDelegate(touchRect, delegate); //And set it on the parent parent.setTouchDelegate(touchDelegate); } |
使用方法:
1 2 3 4 5 6 | //Get references to the View in the layout parent = (View) findViewById(R.id.parent); delegateButton = (View) findViewById(R.id.cmdClickMe); //The TouchDelegate has to be set after everything has been calculated and drawn parent.post(getTouchDelegateAction(parent, delegateButton, 50,50,50,50)); |
將 getTouchDelegateAction 放入自己常用 library, 以後按需要直接使用, 紅黑紅紅黑, 就係咁簡單.
Wednesday, July 4, 2012
Android 新 UI 功能向後支援總匯
由 3.0 開始,Google 發表了不少新的 UI 功能以加強用戶體驗,計有 3.0 發表的 Action Bar、Fragment 、 Property Animation。3.0 發表並於 4.0 大幅進化的 Holo Theme,4.0 發表的 Grid Layout,4.1發表的 Notification, 豐富 Activity 轉換動畫的 ActivityOptions 等。大量新功能要向下支援舊版本確實是開發者一大煩惱。幸好很多有心人為了減少其他開發者的時間,發表了不少支援 Library,令開發者可以把時間專注於本身軟件的功能上。下面是一個支援庫總匯,希望開發者可以更新自家軟件並用盡 4.0 UI 功能,使用家不用再忍受新舊 UI 軟件同時使用的煩惱:
Action Bar:
ActionBarSherlock
http://actionbarsherlock.com/
Fragment:
Google 自家出品的 Support library
http://developer.android.com/tools/extras/support-library.html
Animation:
NineOldAndroid
http://nineoldandroids.com/
Holo Theme:
Holo Everywhere
https://github.com/ChristopheVersieux/HoloEverywhere
Grid Layout:
android-gridlayout
https://github.com/dlew/android-gridlayout
Notification:
NotificationCompat2 (UI 上舊版本不會有變化, 但新 api 不會令版本舊 force close )
https://github.com/JakeWharton/NotificationCompat2
ActivityOptions:
ActivityCompat2
https://github.com/JakeWharton/ActivityCompat2
[更新 NotificationCompat2, ActivityCompat2]
Action Bar:
ActionBarSherlock
http://actionbarsherlock.com/
Fragment:
Google 自家出品的 Support library
http://developer.android.com/tools/extras/support-library.html
Animation:
NineOldAndroid
http://nineoldandroids.com/
Holo Theme:
Holo Everywhere
https://github.com/ChristopheVersieux/HoloEverywhere
Grid Layout:
android-gridlayout
https://github.com/dlew/android-gridlayout
Notification:
NotificationCompat2 (UI 上舊版本不會有變化, 但新 api 不會令版本舊 force close )
https://github.com/JakeWharton/NotificationCompat2
ActivityOptions:
ActivityCompat2
https://github.com/JakeWharton/ActivityCompat2
[更新 NotificationCompat2, ActivityCompat2]
Tuesday, June 26, 2012
Android device 多逹 4000 種, 不同螢幕大少/解像度會否成為開發者的致命傷?
早前有報導指 Android device 多逹 4000 種, 亦因此為開發者帶來不少難度. 其中, 各種不同螢幕大少/解像度會否成為開發者的致命傷?
要設計一個能支援所有 Screen Size 的 UI 主要考慮到三點, 一是螢幕大小 , 二是螢幕密度 , 三是顯示方向.
一, 螢幕大小歸納了四種: small, normal, large, and xlarge. 由 1.6 版本開始, Google 已經向開發者說明 UI 設計應該使用 Density-independent pixel (dp / dip) 作為計算單位. 所以, 首先注意的是每一件元件都要以 dp 來作單位, 而不是 px. 再配合不同 Qualifier 就可以為不同大小的螢幕設定不同的排版 (如: layout-small/, layout-xlarge/). 排版時要善用 weight 及 9.patch 圖片, 這樣系統顯示版面時會自動為不同螢幕大小修正長度,
二, 螢幕密度大概分為 ldpi, mdpi, hdpi, xhdpi 及 tvdpi(Google TV用及新的 Nexus 7), 根據(一)的排版, 就可以製作不同大小的圖像應用到不同密度的螢幕. 圖像大小可以以 mdpi 作為參巧值, 如一個 50x50px 的圖片, 在 hdpi 可以製作成 75x75px. 除質素提高外, 較大的圖像所製作的按鈕在高密度的螢幕會較為好按. 如果用家的設備沒有相應的圖像資源, 系統則會自動縮放現有的資源顯示. 如要偷懶的話, 可以只為 hdpi 製作圖像, 但細小的螢幕可能會出現圖像過大的情況, 而自動縮放亦都會使圖像質素下降.
三, 基本上只要為(一)所排的版面再以不同方向排版一次, 如有需要的話可以配合 Fragment 為不同的方向製作不同版面, 這個有機會再講.
如一切順利的話, 你的應用相信已經可以支援市場上九成九的螢幕了。相信第一次製作全螢幕支援的軟件會感到困擾, 但一掌握了技術的話, 以後只要作幾個重點測試已經足夠了. 況且就算做得不太好, 亦只會"比較難睇", 軟件還是可用的. 相信不會成為開發者的致命傷.
Thursday, August 5, 2010
每一個開發者都應該要注意的事 (SD card 相關)
隨著 Android 越來越普及, 軟件數量幾何級上升, 試用新軟件已經成為一種樂趣.
但當經過一段時間, 用家不難發覺 SD card 的根目錄會變得十分混亂. 因為不同的開發者都有建立自己的文件夾, 當軟件被刪除後文件夾卻留在 SD card 裡. 原來由 Froyo 開始, 開發文件便有提及外存路徑的正確位置, 只要開發者把軟件的存取路徑置為 getExternalFilesDir() 或 " /Android/data//files/", 軟件被刪除的時候文件夾及裡面的內容會被一同刪除.
多一個軟件使用正確路徑, 就少一分混亂. 為保持一個良好 SD card 環境, 請各開發者將你下一個更新把軟件使用的文件夾放入正確位置.
注: 該路徑亦會於 Upgrade 軟件時刪除, 如有大量要保留下載資料的軟件可能不適用.
http://developer.android.com/guide/topics/data/data-storage.html
但當經過一段時間, 用家不難發覺 SD card 的根目錄會變得十分混亂. 因為不同的開發者都有建立自己的文件夾, 當軟件被刪除後文件夾卻留在 SD card 裡. 原來由 Froyo 開始, 開發文件便有提及外存路徑的正確位置, 只要開發者把軟件的存取路徑置為 getExternalFilesDir() 或 " /Android/data/
多一個軟件使用正確路徑, 就少一分混亂. 為保持一個良好 SD card 環境, 請各開發者將你下一個更新把軟件使用的文件夾放入正確位置.
注: 該路徑亦會於 Upgrade 軟件時刪除, 如有大量要保留下載資料的軟件可能不適用.
http://developer.android.com/guide/topics/data/data-storage.html
Thursday, June 3, 2010
如何使 tabs widget 向下支援?
要學會在 Android 軟件上使用 tabs, 線上都會有不少範例可供參考. 但可惜大部份都會造成 Android 1.6 以下所有 tab 重疊的現像. 要解決問題, 原來只要使用 LayoutInflater 就可以:
TabHost mTabHost = getTabHost();mTabHost.setup();LayoutInflater inflater_tab1 = LayoutInflater.from(this);inflater_tab1.inflate(R.layout.tab1, mTabHost.getTabContentView());inflater_tab1.inflate(R.layout.tab2, mTabHost.getTabContentView()); mTabHost.addTab(mTabHost.newTabSpec("tab_1").setIndicator(getText(R.string.live)).setContent(R.id.tab1));mTabHost.addTab(mTabHost.newTabSpec("tab_2").setIndicator(getText(R.string.chat1)).setContent(R.id.tab2));
注: 如果你的軟件是供 2.1 或以上, 就無須使用 LayoutInflater 都可以正常運作.
如要簡化 main.xml, 方便開發及預覽每個 tab 的 layout, 可以分開每個tab 的 xml layout, 再用 setContent 呼叫相應 xml 內的 id 即可.
Tuesday, June 1, 2010
Android ui 設計好幫手 droiddraw
在開發 Android 軟件時, 因為 editor 的環境問題, 往往在 ui 設計時不能實現 wysiwyg 的介面設計.
幸好現在有網上資源 droiddraw 彌補:
droiddraw 隨了可以實現 wysiwyg 外, 它亦有匯入及匯出功能. 雖然此工具未必對老手有幫助, 但它可以樣一眾新手了解 Android 不同 widget 的特性以及各樣偏好設定, 亦可以用作 ui 設計練習.
Subscribe to:
Posts (Atom)