CSC的程設紀錄

CSC的程式設計相關研究紀錄、開發日誌

顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

Design for Android - 給Designer的小小建議(一)


嗯呃...最近真的寫程式畫UI搞得我不爽到很想寫這個題目。當然啦,新手沒有錯,甚至有的人可能覺得我不是新手、我做網頁作很久了,所以問題其實是出在,為什麼沒Mobile經驗的設計師會被直接找來做Mobile UI Design............算了這不是重點啦

重點是,如果你做過網頁做過Flash甚至做過iOS UI Design,歡迎大家來跟Android app攻城屍合作,但是合作之前可能你會有幾點需要了解的:


1. 做Android UI跟Flash不一樣,完完全全不一樣


我知道台灣很多設計師之前都做網頁跟Flash的,或者有很多人設計Mobile UI是iOS先弄再來考慮Android,但是Flash跟iOS有個Android沒有的特色,就是"長寬大小可以固定"(iOS的iPhone 5有變長,但是還是比Android好解決),例如我寫一個Flash可以固定在1024x768,然後更大的螢幕我就讓它embed區域置中,而且也不太需要考慮DPI的問題(好啦,retina display出來之前是這樣XD),更不用考慮"長寬比"的問題。差別在哪裡呢?最大的差別就是,大小固定的狀態之下你可以把按鍵或者任何"可按範圍"的大小跟位置都寫死成px的單位,例如先貼一張背景大圖,左上角有一朵雲在50,50的位置、可按大小是100x60、然後右下角有一棟房子八啦八啦,我知道超多Flash的主選單設計成這樣的,但是能不能拜託你們不要把這東西帶到手機上啊

回到Android的世界,這樣的設計會有什麼問題呢?Android UI在Layout的時候是沒人在用px這種東西的,Android UI基本的長度單位是dp(詳細說明,不好意思,英文的),它的定義是無視螢幕密度的pixel,講白一點就是1dp在不同實體螢幕看到的"物理長度"應該要是大約一樣的(但是不會完全一樣),實際上160dp約是1英吋左右的長度。所以把px寫死的作法,換成把dp寫死的時候,遇到dpi跟解析度不同的螢幕時,可按的位置就可能會跑掉,也就是說在大圖上面蓋透明按鈕的作法,在Android上是行不通的,真的要做的話就請把能按的部份乖乖切出來,並且背景圖跟可按圖樣要能設計成適應不同解析度跟長寬比......很麻煩對不對,所以請不要在手機上做這種設計吧。

(好吧,我承認這個問題還是有解,因為我遇到了這種設計所以不得不做出來,目前的唯一解法應該是背景大圖用ImageView、scaleType設fitXY,前景的透明Button請放在LinearLayout裡,大小全部用layout_weight去調,不要管IDE給你的"nested wight"警告XD,這樣做唯一的缺點就是會跟著螢幕長寬被拉變形,反正變形跟留黑邊總是要挑一個,至少變形的比較好做(爆))

另外一個跟dp相關的問題就是,因為現在該死的超大螢幕Android手機非常多,所以設計上最好要考慮到各種螢幕大小的情形,不然就會變成一直被客戶或使用者抱怨,然後工程師只能慢慢調。基本上Android官方喜歡的設計是左右寬度拉到底(match_parent),然後上下可以按照大小調整高度,太高就要可以捲動(wrap_content or XXdp + ScrollView or ListView),但是因為設計師跟客戶的異想天開天馬行空設計,常常會把高度限制住,有時候甚至不給scroll,那就要考慮你的內容的dp長度是不是能在大小螢幕手機都塞得下,看是要乾脆都設成layout_margin(邊界寬度)以內的都是內容,或是寫死一個dp大小。不管是哪種情形的設計,其實工程師都很可能還是得做額外調整,請大家愛用value-swXXXdp/dimen.xml,雖然這東西API 11才有,不過反正大螢幕的手機都是新的XDrz。

2. 提供檔案時請注意下列事項:

  • Android要放在res目錄包進apk的圖檔命名,檔名只能有小寫字母+數字+底線"_",所以請不要有"大寫字母"跟"-",我知道用Windows的人很多,但是請替mac和linux user著想,而且Android本來就是linux kernel,大小寫是分開的。
  • 單色背景、文字顏色跟文字陰影顏色,可以直接給ARGB色碼,讓工程師自己寫xml就好。
  • 比較簡單的按鈕背景或者單純的區塊背景,請盡量作成可以nine-patch化的樣子,當然可以作成Android吃的.9.png最好,但是沒有的話至少讓工程師可以自己做,如果堅持要用陰影比較複雜的圖檔,那就要有pixel被scale之後糊掉的心理準備XDrz
  • 可以按的區域請至少提供按下去(pressed)之後的效果,事實上Google官方會希望你連被聚焦都做(focused,就是被"選擇"但是還沒點下去,找個網頁按tab你就知道了XD)。
  • 圖檔會需要不同dpi的版本,如果想要支援比較舊的手機(或者平板XDrz),那從ldpi(0.75X),mdpi(1X),hdpi(1.5X),xhdpi(2X)(例如S3跟note),xxhdpi(3X)(S4跟butterfly)都會需要支援,如果不想管太舊的(還有平板XDDrz),那就把ldpi忘了吧(?),如果圖檔很多又很大,那還是把xxhdpi忘了吧(不然apk size真的會爆,尤其png的bit數還設很高的,破百沒問題),被忽略的手機上的圖就可能會有點糊(小變大)或者跑不動(大變小),其實小圖拉大我個人看起來是沒差很多啦(裝死)。然後如果覺得準備那麼多解析度很煩,那就做個最大的叫工程師自己用xnview或automator自己resize吧(爆),反正這樣也省得一直傳檔案。
3. 做Android UI跟iOS也不一樣,真的不一樣

這個多到應該另外開一篇文章來講,總之雖然很多東西跟元件要作成iOS style也不是辦不到,但是不建議,真的不建議,因為使用者習慣和平台UX設計就完全不同了,混在一起會讓工程師困擾,使用者困擾,最後只有少做一套的設計師跟自以為很統一的客戶笑得出來...
而且Google官方很強調這點,某次GTUG的時候Google advocator就講過,剛好這幾天Android Developer官方影片也有提到:影片連結

這個影片的東西值得翻譯成中文再寫一篇了XD,我們下次再見

Main Ref: http://petrnohejl.github.io/Android-Cheatsheet-For-Graphic-Designers/







四天寫了一個新app



先講一下之前的app的情形,簡單來說就是,我真的把舊app都下架了,因為就算有時間也不是很想更新資料,而且非官方的Costco論壇有做Mobile介面,應該還夠大家用吧?(話說我自己也很久沒買Costco的東西了,反正附卡家人有在用。)

另外就是這個新的app了,新的app是一個LBS的app,正確來說它是一個LBBBS(Location-based bulletin board system),基於地點的留言板。概念的來源很簡單,PTT不是都有地方板嗎?為什麼不開一個手機用的,還可以自動偵測地點耶。就這樣。

當初想到這個東西之後,網路上真的隨便查都有類似的,例如這個YC出身的MessageParty (已經關了),還有一些我已經忘記名字的,最近隨便查也有一些新的像是Mixer之類的。但是好像都沒有一個做起來的喔?XD

無論如何,人家做不起來沒關係,我也做不起來也很正常,但是可以做為什麼不做出來玩玩看?順便練習一下一些不熟的工具也不錯。

所以這個app就上架了,兩天寫後端兩天寫app,上架,就這麼簡單。
Play連結: 點這裡

為什麼可以那麼快上架呢,當然是因為我把功能砍到最低底限了XD
這個app的功能就只有找附近留言板,建立現在地點的留言板,看留言,寫留言,這樣而已。
而且完全沒做登入功能,也完全沒有安全性跟隱私可言,如果稍微有點技術底的人也可以輕鬆做出幾千公里外的留言板,或者直接寫程式把資料庫塞爆。

不過沒差啦,因為這次用的是heroku+MongoLab,爆了也不會跟我要錢啊XD

來數一下技術的東西吧,後端是用Play Framework寫的,只有要寫簡單的API所以很快,然後丟上heroku讓它跑,稍微麻煩的只有跟MongoLab接起來的地方,照慣例是用gson做ORM直接塞MongoDB,因為我討厭SQL,速度應該是一點都不快啦,不過能用就好。有趣的地方是在於MongoDB有個2d Index的功能,可以直接照經緯度資料去搜地點接近的資訊,不用自己寫程式處理這段。app的部份也是超級簡單,icon直接用SDK做,內容就兩個Activity解決,一個列留言板一個列留言,打完收工。

小Bug還很多啦,像是我要了fine location的權限,但是完全忘記寫程式去要GPS定位資料,所以現在用的應該都只有AGPS。不過會不會改就看有沒有人要用啦,我是覺得應該沒有啦XD。我自己倒是覺得可以拿來留一些廢話,像是去到辦公室就留言當打卡,去到哪邊吃飯就開個留言板評論一下,也不錯啦。

下次想做的東西是遺失物公告整合查詢資料庫,因為最近掉了東西滿難過的,打算拿這個去g0v玩玩......






好市多購物資訊0.7.7版更新


說好的掌中小財神更新呢???


(跪)


----

網址: https://market.android.com/details?id=tw.cosecant.costshopping
(一樣可能要等一下才會上Market XD)


0.7.7:
1. 修正小問題
2. 資料更新按鈕移至折價券列表下方
3. 增加刪除單週過期資訊選項
4. 增加分店檢視模式



這次一樣放出有無廣告兩版的APK檔~
希望大家下載了自己用就好,
要分享或轉貼的話,請盡量分享網誌的網址~ 謝謝~ !!

APK檔點此下載  無廣告版本APK檔

連結失效的話請提醒我,謝謝XD

----

兩個app都有一堆想改的,但是有更重要的事情在等著我完成啊!! Orz

好市多購物資訊0.7.1版更新

網址: https://market.android.com/details?id=tw.cosecant.costshopping
(可能要等一下下才會在Market上看到XD)

0.7.1版又更新了...主要是修正購物提醒重開機之後會被系統清掉...
但是安裝到SD卡的話,這個修正基本上沒什麼用Orz....
Android系統本身呢...本來就不建議這種有設鬧鐘的程式安裝到SD卡...@@
所以不想要提醒失效的人,記得不要裝到SD卡喔XD

0.7.0版更新,主要是增加購物清單與提醒的功能,
所以多了手機振動的權限!

新功能有︰


1. 折扣列表按手機上的menu鍵(選單鍵),可清除過期優惠專案,但不會清除已過期的當月優惠資訊。
2. 購物清單功能開放,可在折扣列表點選商品新增。
3. 購物清單具有提醒功能,提示訊息會出現在上方狀態列,手機需已開機才會提醒。
4. 購物清單按menu鍵,可清除所有過期或已買之商品。
5. 購物清單點選商品,可對單一商品做修改數量、取消提醒、設為已買等設定,但無法修改提醒時間。

另外有很多人可能因為刷機或Market過濾問題,所以無法下載,
這邊放APK檔給大家試試看,以後的更新也都是從網誌發佈~
不過裝APK不保證能正常運作喔XD

另外因為上次寫出很恐怖的bug,為了補償,這次一併放出無廣告的APK檔~
希望大家下載了自己用就好,
要分享或轉貼的話,請盡量分享網誌的網址~ 謝謝~ !!

APK檔點此下載  無廣告版本APK檔

連結失效的話請提醒我,謝謝XD

關於自製App的問題...

1. 好市多的app因為第一版(0.5.0)有嚴重bug(詳細請看Market更新或上一篇),
所以我決定開一個FB頁收集大家的憤怒...(WOW德魯依的那種也收)

FB頁連結在這邊

只要遇到SD卡嚴重bug,結果害你重灌/回覆預設/格式化SD卡的人請到FB這邊來,
在這邊幾乎隨時可以找到我,所以你要罵要抗議還是要跟我約時間讓我請客都ok.....= =


2. 有很多人反應Market無法下載,但是我實在搞不懂我的設定過濾掉了什麼機器....
所以之後會在這邊放程式的APK檔,而且會是無廣告版,也當作寫出鳥bug的補償...= =


以上 <(_ _)>

恐怖的".nomedia"...Orz

話說Android上有一個很不直覺的功能.....

各個看圖程式、音樂影片播放程式,
必須到SD卡的所有資料夾搜尋相關檔案列表,
那如果有個資料夾不想被掃描到該怎麼做?
就得要在該資料夾裡加上一個很不直覺的檔案叫".nomedia",
為什麼是用"點"當檔名開頭呢?
那是因為這種檔名是Linux系統下的隱藏檔格式.....

有很多人根本不知道這件事,
所以就只能讓蘋X日報的app在你的相片集裡放滿新聞照片...囧
但是其實...app是可以解決這件事的! 雞婆一點在自己資料夾裡放.nomedia就好了嘛!

..............然後就會出現像我這種把.nomedia塞到SD卡根目錄的笨蛋 (翻桌)

我對不起大家......T______T
我以後不會再半夜兩三點寫code了.....<(_ _)>

安裝程式在SD卡時Unknown Error -18的正確解決方式

-------------------
本文曾發表於Mobile01

(不知道為什麼還是一直有人在M01問同樣的問題啊啊啊XDDDD)
-------------------

之前遇到這個問題,找了一下才找到正確的解決方式,
這邊好像沒有po過,就來po一下吧!

症狀:
安裝在SD卡的程式無法更新 & 自動安裝在SD卡的程式(Angry Birds就是)無法安裝
下載之後會在安裝的時候失敗,如果是APK檔會直接顯示"應用程式沒有安裝"之類的訊息
如果按下安裝之後,讓畫面停留在程式說明頁面,則下載後會跳出"安裝失敗 Unknown Error -18"的訊息

發病對象:
Android 2.2機種,包括原生Desire 2.2的ROM
或者2.1之前有做App2SD的好像也有可能遇到 (不確定)

解決方法:
在Angry Birds的討論串,有人說把SD卡卸載,讓先它裝到手機就可以了
但是這似乎是治標不治本的方式,而且空間不夠大就不能這樣做了,

網路上查到的根本解決方法則是
1. 從Windows進入你的SD卡(或者用adb shell),找到".android_secure"這個目錄
2. 找到裡面smdl2tmp1.asec這個檔案,砍了他!
3. 祈禱會有效!

.......因為似乎不是所有發生相同問題的手機都是這個原因,
所以大家就當參考試試看吧!

Angry Birds(及其他遊戲app)的成功之處

一個好的手機遊戲(甚至所有遊戲)應有的元素,Angry Birds做到了哪些?
一些基本的例如流暢的遊戲速度,基本的角色設定就不用提了,
Angry Birds跟其他爆紅的遊戲多半有某些特色:

1. 耐玩度:
耐玩度=關卡的數量+難度的提昇+成績成就的追求。
當然如果只是不斷的增加難度(Ex: Robo Defense),也許玩膩的速度還是會很快。
但是Angry Birds這三者可以說都有做到,關卡不斷擴充、得到三顆星成績的難度...等等
要讓玩家在遊戲裡獲得成就感是很重要的,
難度太簡單玩家會覺得自己被當笨蛋、太難的話則會覺得自己真的是笨蛋......

另外同時有"時間或空間的因素"可以讓玩家不斷微調是很重要的,
這次失敗了下次重來,要用什麼不同的方法?
如果只有三個選項,很快就試完了,但是Angry Birds有許多角度可以試驗,
也因此,我懷疑他們在物理引擎中加入了一些亂數的成份......XD


2. 介面的流暢度與方便性:
這裡的流暢度不只是拉彈弓時不lag...(事實上廣告出來的時候通常很lag...XD)
而是整體介面的設計,按每一個按鍵都要非常快能反應,
尤其是"重來"這個按鍵,影響到前面所說的"耐玩度"很深...
因為一瞬間就能重來,所以就會讓人不斷想重來XD
跳出的時候也能很快就跳出,一直按BACK鍵就可以了(但是RIO版本這樣按會卡在最後一步XD)。

方便性則是手機遊戲另一個很重要的重點,
這點Angry Birds做到了一件許多app作不到的事--只要單手就能玩
沒錯,只要用左手就能玩了,右手如果正握著電車的握環,你能玩的只剩下Angry Birds...XD
這點還要配合遊戲節奏才能辦到,不然就算你做出只用單手就能玩的射擊/格鬥遊戲,那也沒什麼差...


其他的想到再補吧,這兩大類就已經夠重要的了。

掌中小財神更新囉

是的,經過了兩個月終於更新了,
其實中間大部分時間都在忙別的事,
例如重感冒兩週、搬家搬了快一整個月...
(用機車搬家的窮工程師= =)

改版紀錄:
========

Ver. 0.8.0
新功能:
1.提高彩券上限至500筆
2.支援包牌與系統配號投注,對獎時僅取最大獎顯示
(請在選號時按menu鍵設定!)
3.彩券管理介面可以選擇排序方式,按menu鍵即可設定!
4.主選單會自動顯示頭獎預估金額(需連網)
5.新增權限為廣告顯示所需,不喜歡廣告的人請勿更新!

=========

試著放上了廣告,希望不要太多人覺得反感,
其實我自己是很喜歡免費軟體有廣告的,不然作者哪有飯吃? XD

掌中小財神-彩券小工具





掌中小財神-彩券小工具是一個簡單的工具程式,
專門支援台灣地區現有發行之台灣彩券,功能有:
1.由網路查詢彩券獎號
2.輸入並記錄彩券(支援亂數快選)
3.由個人彩券記錄直接對獎
本程式支援威力彩、大樂透、今彩539、3星彩、4星彩

這個程式沒有華麗花俏的介面,但是未來還會新增許多新功能,敬請期待~!

Keywords:
台彩 彩券 台灣彩券 樂透 樂透彩 財運 幸運 運勢 財神

Ver. 0.6.0
Beta Release


--------------------------------------

上一篇文章都十月的事了...
本來想盡量把寫程式過程遇到的問題紀錄在網誌裡,
結果光寫就幾乎沒時間了...畢竟白天還要上班啊Orz

總之總算是傳上去Market了,希望可以有人給我一些意見,bug報告也好...<(_ _)>
說起來還真是心酸啊= =...
別人在寫app的都是整個team直接當正職做,
像我這種上班Eclipse下班也Eclipse的應該是少數吧....
這樣真的做得贏別人嗎......XDDDDDDD

EditText, Focus, Soft Keyboard...

How to close/hide the Android Soft Keyboard?

Issue 2705: Setting requestFocus on EditText prevents soft keyboard from opening

Uhh...I've got some problems here.
But I gotta sleep now...
Sadly, tomorrow is MONDAY... Maybe I have to solve these problems next Saturday.
*Sigh*

Two more issues:
Issue 2771: Disabled EditText can still be edited using on-screen keyboard

Issue 3341: setFocusable() & setFocusableInTouchMode() don't work coreectly

So the solution's here:
Whe you wanna completely disable the soft-kb:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

所謂的Hello World...

一般來說,寫程式第一個範例都是Hello World
不過個人習慣加一點料...

Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(buttonAction);

加個Button跟Listener...

private boolean flag = true;
private OnClickListener buttonAction = new OnClickListener(){
public void onClick(View v){
TextView text = (TextView)findViewById(R.id.text);
if (flag){
text.setText(R.string.hello2);
}
else {
text.setText(R.string.hello);
}
flag = !flag;
}
};


按Button則切換兩個String顯示.....
(string.xml)

<string name="hello">Stairway to heaven</string>
<string name="hello2">Highway to hell</string>

然後String一定要用這兩個 XDDDDDDDD

.......還真無聊Orz

Android 2.2 (Froyo)

Android 2.2 (Froyo) 正式發表


  1. 速度大提升,Dalvik VM上增加JIT compiler,瀏覽器也增加Chrome的js引擎(感想是: Google裡真的是一堆神人........)
  2. Enterprise Support Enhanced
  3. App Data backup API & Cloud to Device Messaging API,App可以備份本身需要的資料....也可以經由Google的Server傳訊息到手機上
  4. USB Tethering & Wifi Hotspot sharing,就網路分享.......XD
  5. 語音搜尋、翻譯、播號等等,英文之後會先支援中、日文,有裝語音搜尋的人會發現Google翻譯裡的中翻英跟日翻英已經能用語音了...辨識度中上.....對我來說還比英文好,因為英文發音不標準XDDDD
  6. Flash 10.1 & AIR support (Steve Jobs表示:.......)
  7. 對一般User最重要的...APP2SD...! 另外market上有Auto-update跟Update-All可以選擇,並且可以在電腦上選app下載,也可以線上買專輯,然後串流到手機播放...
  8. 對開發人員比較重要的...bug Report System,另外也有新的互動式廣告(Just Like iAd)
  9. 新的SDK跟NDK也出了 (一般的個人Developer應該用不到NDK...沒那麼強Orz)

然後現場一人送一台EVO 4G....! (送一個月吃到飽約的樣子)

以後要記得,Google辦的活動說什麼都要去參加 XDDDDDDDDDD

一下子送N1一下子送EVO的.......

不過這次比較接近Sprint的陰謀XDDDD

EVO 4G加綁約應該是$199 加送一個月應該是$79.99

$280.....然後報名費據說是$400這樣 XD 而且之後也會有很多人跟Sprint續約...科科...

......但是能比人早兩個禮拜拿到就是爽 XD (也比人早當白老鼠.....XD)

新網誌開張測試

只是找一個地方放Android的研究紀錄...XD

那當然是用Google底下的Blogger最適合了(真的嗎?)