Monday, August 30, 2010

Android: Android Compatibility and uses-feature

Android is designed to run on devices with different kinds of capabilities; however, some APIs won’t work correctly if a device lacks corresponding hardware or feature. For this case, Android Market provide a mechanism to prevent apps from being visible to devices which don’t have features the apps require.

How Android Market filter apps from devices without required feature?
Android Market check element in your app's manifest.

Example: An app which requires camera
1. Request camera permission

2. Specify camera is required for this app

*note
Any app that requests camera permission but does not declare any camera features with the element will be assumed to use all camera features (auto-focus and flash).
Thus, this app will not be compatible with devices that do not support all camera features.

ref:
1. Android Compatibility
2. uses-feature

Android: ListActivity, ListView and ListAdapter

How to display list view?

1. use ArrayAdapter

(1) create ListActivity
(2) set data source to ArrayAdapter
(3) get ListView from ListActivity
(4) set adapter to ListView
(5) set click listener for each list item

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDataSource = getResources().getStringArray(R.array.countries_array);
mListAdapter = new ArrayAdapter(this, R.layout.text_item, mDataSource);
setListAdapter(mListAdapter);

ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast t = Toast.makeText(TextListViewActivity.this, mDataSource[position], Toast.LENGTH_SHORT);
t.show();
}
});
}


2. customize adapter

(1) create ListActivity
(2) create CustomizedAdapter which extends BaseAdapter
(3) implement getCount/getItem/getItemId according to your data source
(4) create layout from list item
(5) implement getView, use LayoutInflater to set view of item

public class CustomizedAdapter extends BaseAdapter {
protected String[] mDataSource = getResources().getStringArray(R.array.countries_array);

@Override
public int getCount() {
return mDataSource.length;
}

@Override
public Object getItem(int position) {
return mDataSource[position];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater li = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.compound_image_text_view_horizontal, null);
TextView tv = (TextView) v.findViewById(R.id.itemText);
tv.setText(mDataSource[position]);
return v;
}
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearItem"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="5sp" android:layout_marginBottom="5sp"
android:src="@drawable/icon"/>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/itemText"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10sp" android:layout_marginBottom="10sp"
android:textSize="24sp"/>
</LinearLayout>

(6) set adapter to ListView
(7) set click listener for each list item

3. customize adapter and change theme of ListView

set view to ListActivity

<ListView android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:fastScrollEnabled="true"
android:background="@color/fade_white"
android:cacheColorHint="@color/fade_white"
android:divider="@drawable/gray_divider"
android:dividerHeight="1dp"
android:focusable="false"
android:scrollingCache="false"/>


ref:
1. Hello, ListView
2. ListAdapter

Wednesday, August 25, 2010

Android: Working with Library Projects

What is library projects?
- a development project that holds shared Android source code and resources

When should I create a project as library?
- if you have source code and resources that are common to multiple application projects

Why should I create a project as library?
- easier to maintain across different applications

What are the differences between standard and library project?
1. library project cannot be compiled directly to its own .apk
2. library project cannot reference other libraries

How to solve resource conflict between application and libraries?
1. conflicted resource with lower priority will be discarded
2. priority: application > library (priority of each library can be defined user)
3. use prefixes to avoid resource conflicts

How to create a library project?
1. create an android project
2. modify project properties
(1) Properties->Android
(2) check "Is Library" box
3. declare all components to be shared in manifest

How to referencing a library project from an application?
1. goto application project
2. modify project properties
(1) Properties->Android
(2) add project(s)
(3) use up/down to change priority of projects if necessary

3. add declarations of all components will be used from library in manifest
4. add library to build path (not mentioned in official document)
(1) Properties->Java BuildPath->Source
(2) link source
(3) rename folder if necessary

ref: http://developer.android.com/guide/developing/eclipse-adt.html#libraryProject

Thursday, August 19, 2010

我系列: to myself

回到家洗完澡腦海中又浮現了這首歌,

fix you 不讓我嵌入...

幾乎是每次,
只要看到Chris Martin穿過隧道,
腳步昂揚地來到舞台上,
我的眼淚就忍不住要掉下來.

Coldplay - Fix You

When you try your best
but you don't succeed
When you get what you want
but not what you need
When you feel so tired
but you can't sleep
Stuck in reverse

And the tears come streaming down your face
When you lose something you can't replace
When you love someone
but it goes to waste
Could it be worse?

Lights will guide you home
And ignite your bones
And I will try to fix you

And high up above or down below
When you're too in love to let it go
But if you never try you'll never know
Just what you're worth


Lights will guide you home
And ignite your bones
And I will try to fix you

Tears stream down on your face
When you lose something you cannot replace

Tears stream down on your face
And I...

Tears stream down on your face
I promise you, I will learn from my mistakes

Tears stream down on your face
And I...

Lights will guide you home
And ignite your bones
And I will try to fix you.

現在我也邁開步伐了,
會跑到哪兒呢?

希望能跑到那個舞台上.

Sunday, August 15, 2010

超現實的巴黎旅行Day 7: 住宿篇

我們在巴黎約一個禮拜的時間住的B&B是在Meeting The French找的,
這裡不僅可以預約B&B或公寓住宿,
還提供了一些特別的活動像是搭直升機俯瞰巴黎市區或是甜點製作課程等等,
最特別的是讓你有機會到法國人家中一同晚餐體驗道地的法式料理.

這個網站跟我們去年看到的樣子已經很不一樣囉XD
資訊變得更豐富也增加了日文版的網頁.
大概去巴黎的日本人真的很多吧! (我們餐廳或是博物館的時候也有幾次被誤認成日本人XD)

因為預算有限,
我們尋找B&B的條件就主要是考量價位跟地點,
房間不用大也不強求要有私人的衛浴設備.

最後找到這間看起來乾淨又漂亮的地方
客廳長這樣


不過位在四樓又沒電梯這點真的很不妙(千金難買早知道啊 >_____<)
而且這棟公寓已經有很長的歷史了所以階梯的直角都被踩的好光滑
晚上樓梯間也沒什麼照明設備.

某天晚上吃完飯大概快11點(在巴黎的時光很珍貴, 不到天黑我們是不會吃飯的)
喝了不少紅酒整個人有點暈眩=.=
要爬上樓的時候就差點滑倒 冏

不過房間是真的很美啊!
而且是由女主人Hélène一手打造的.
從拆掉舊的裝潢,規劃新的設計,油漆,到桌椅裝飾抱枕等等東西,
都是她自己完成的.
我們看了一些改造前的照片,
只能說這完全是化腐朽為神奇啊!

這是我們每天早餐的小餐桌.


Hélène也介紹了一些她喜歡的餐廳~
Le Domaine de Lintillac標誌是鴨子的餐廳
吃了好吃的油封鴨.
另外一間艾菲爾鐵塔附近的餐廳已經忘記名字了=.=
鹹派超讚啊!

算是不錯的住宿經驗.

[讀] 非普通讀者 The Uncommon Reader



這是一本關於閱讀的小說.

故事是從女王遇見巡迴圖書車開始的,
女王因為胡亂吠叫的狗兒而認識了前來借書的御膳房小廝諾曼,
原本只是為了不失禮而借了書,
沒想到這個小插曲竟然就此點燃了她對於閱讀的熱情,
更甚而讓她的生活有了前所未有的改變.

"她還發現一件很有趣的事: 原來, 一本書會牽引出另一本書, 那種感覺, 彷彿隨時隨地一轉身都能碰見一扇開啓的門."

沈迷於書中的女王漸漸對於各種例行活動不那麼投入了,
不僅是在公開場合揮手顯得有些意興闌珊,
連與民眾交談的話題都由生活與交通變成了"你最近看了什麼書?"
這樣的改變讓她身邊的侍從們頭痛不已,
因此千方百計的想要找機會改變她對閱讀的喜愛.

女王其實也對於自己花這麼多時間在閱讀上隱約感到不妥,
畢竟從小被教育的就是治國者必須心無旁騖.
於是她把書定位為接觸其他世界,其他人生活的途徑.
把這樣的責任扛在身上這才讓她心安理得.
不過在一次與秘書的激烈討論中,
她了解到自己其實只是在單純的享受閱讀的樂趣.

隨著時間的累積,
閱讀則對女王帶來了其他層面的影響.
她決定開始寫.
把自己的聲音寫下來.

"書是一件很奇妙的東西, 是吧?"
"我這麼形容, 別人聽了恐怕要把我當成一塊牛排肉了, 不過, 書籍確實讓我變軟, 變嫩了."
"閱讀使人變得柔軟, 而寫作則使人變得強硬 寫文章, 必須強硬, 這說法, 通吧?"

"書籍很少促成實際行動. 看書通常只能用來附和我們早已決定的事, 只是我們沒有察覺而已."
"閱讀一本書, 往往只是為了進一步確認, 印證原有的看法, 信念.“
”因此可以說: 書是一道總結的程序"

======

除了閱讀的部份,
作者也在一些章節對於王室與首相"共同"領政提出一些想法.

這本書最後對於閱讀的描述跟我自己的體悟有部分蠻類似的,
自己看的書不算少也在很多地方找到共鳴.
但總覺得好像少了些什麼.
於是就希望在看完一本書後都能留下點紀錄.
有input總也要有output吧!

或許亞倫班奈也是這樣從讀者變成作者的.

Sunday, August 01, 2010

上海世博人山人海擠到不行: B片區 - 盧浦大橋, D片區 - 日本產業館

5/21 續: 此篇

離開芬蘭館後走到盧浦大橋附近的碼頭,

盧浦大橋橫跨了黃浦江,
我們從B片區的碼頭坐船(免費低)到D片區,

搭的人雖然多但是船的班次也蠻多的,
所以沒有等太久.

搭渡船可以看到世博園區岸邊的景致,
夜晚的園區超美的,
下面這張圖左邊長得像飛碟的是世博文化中心,
右邊網狀拋物面造型的是世博軸.

下了船大大的韓國企業聯合館馬上映入眼簾,

吃完有點晚的晚餐之後又繼續在園區晃晃.

來到日本產業館,
天花板上的圖案是日本畫家絹谷幸二的作品,

門口附近有龍貓的攤位,
不過這隻大龍貓看起來也太哀怨了吧XD

另外也有章魚家道頓堀KUKURU的攤子,
這隻大章魚是從大阪運來的勒!

因為時間的關係只參觀了國譽株式會社的未來郵局體驗館,

他們的想法是利用郵局的網絡可以購買任何商品或服務,
也可以利用QR code在郵局獲得所有地區的詳細資訊,

這個櫃子裡陳列了很多可能販賣的商品,
結合了超商跟旅遊業務等等很多東西,

還有各地特產的名信片,
哦哦哦這是我最心愛的明太子*O*


今天終於寫完啦!!

Sunday, July 25, 2010

上海世博人山人海擠到不行: C片區 - 丹麥館, 芬蘭館

5/21 續: 此篇

走過瑞典館看到旁邊的紅木馬們,
根據瑞典通菜頭的說法,
紅木馬本來只是某個小鎮上販賣的手工藝品,
結果大受歡迎現在已經變成瑞典的代表物之一囉!

我已經長大成熟了絕對不會想要做騎木馬拍照這種事XD


[6] 丹麥館 排隊時間約15mins

丹麥館外面放了很多單車,
也提供了騎單車參觀的路線不過似乎因為人潮太多所以沒有開放,

來到丹麥館的參觀重點當然就是小美人魚囉!
旁邊的展示牆上還標示了小美人魚到中國所經的路線,

接下來的影片介紹了丹麥小朋友與大自然的互動,
還有丹麥的文化創意產業~
走到屋頂上還有水幕空間很多小朋友都玩得很開心!

[7] 芬蘭館 排隊時間約15mins

芬蘭館的造型是個冰壺白天經過順手拍的,
大白天又不小心開了大光圈結果圖就怪怪的好像模擬圖=.=

芬蘭館內就是長這樣可以看到頂端的壺緣.
白色的建築在燈光的投射下其實還蠻有冰原的感覺勒!

芬蘭館最特殊的地方就是由Nokia提供的服務,
如果你打開手機的藍芽走到展館的不同區域就可以收到對應的中文文字解說哦!
芬蘭人生活的各個面向像是冰球設備, 傢俱設計等等.....
其中讓我印象最深刻的就是桑拿,
這裡有個非常熱愛桑拿的瑞典解說小姐中文非常好哦!
她很熱情的介紹桑拿相關的設備及服裝.

最後到了商店,
一進門就看到叫賣馴鹿皮的小姐還蠻可愛的勒!

另外還有賣姆米相關產品(不過都好貴),
姆米是繼米菲兔之後另一個被日本人搶去發揚光大的動物啊!

出了芬蘭館已經天黑黑囉~
滾球人還辛苦的在工作中哪!


接著就是吃飯時間了.

Thursday, July 22, 2010

我系列: 轉變

最近感受到自己的轉變,

好像比較溫暖也比較堅強了,
生活也變得很有紀律.
蠻喜歡現在的狀態.


不過為什麼要在尾巴放上這張不合時宜呢!!??

Monday, July 19, 2010

上海世博人山人海擠到不行: C片區 - 英國館, 挪威館

5/21 續: 此篇

[4] 英國館 排隊時間約2hr

排英國館的時候非常不開心,
在我們後方的沒禮貌母女擋一直伺機插到我們前面,
黑先生要她們排回去插隊媽媽還一直撇過頭假裝沒聽到真是超扯的!!

進入英國館的大門後我們跟著人潮沿著走道往種子聖殿走,
這裡的主題是綠色城市,
展示了英國各個城市為了環境綠化做了哪些努力,

到了種子聖殿入口,
它的外牆是由大量的壓克力棒組成,

建築物內部沒有照明設備完全是靠壓克力棒將光線引來的,
壓克力棒的尾端都是種子喲~

靠近點兒看! 是玉米呢! (其他都不認識Q.Q)

還有蒲公英!

在館內逛了一圈之後就到下個展區.
走道旁的展示櫃裡有各式各樣的植物,
最奇妙的是有的植物是科學家們正在培育中的!
下面這棵長得非非非非非常恐怖=.=
它可以自己吃自己啊!!?? (抖)

這棵植物可以長出藥材的樣子(有點忘記XD)

廣場上有街頭藝人的表演!

跟種子聖殿合照遠看真的很像蒲公英呢~

從其他不同的角度拍都可以看到象徵英國的米字形.
如果想要近拍完整的種子聖殿一定得進來參觀,
從外面拍會被圍牆擋住低.

離開的時候發現男扮女裝打扮的一群人.


[5] 挪威館 排隊時間約10mins

以木頭為主要材料打造的挪威館看起來像棵樹又有點像帆船!

館內的溫度很低營造出一種彷彿真的身在挪威的感覺XD
這裡主要展示的是挪威與大自然和諧共處的情況,
可以看到北極熊游泳的影片,

我還在裡面喝了經過淨化設備過濾後的水喲!

以下是挪威館的附近的展覽館們,
因為時間關係就沒進去參觀啦!

相當有韓國味的烏克蘭館XD

長得像紅棕色起司的土耳其館!


這天還沒寫完吶...

Sunday, July 18, 2010

2010/07/17 校長光榮歸國接風大會: 油庫口麵線, 梁季港式小火鍋

沒多久之前才在西門町的石頭火鍋歡送校長前往愛爾蘭,
結果轉眼間校長已經光榮歸國啦! (還在溫布頓看了網球史上最長的比賽真是太囂張了!!)
時光咻一下就過去柳...

(補一下合照 菜頭拍的)


另外不得不提一下,
這個邀請最成功的地方就在於校長的照片啊!
過去關於"張同學"的大大小小回憶又湧上心頭啦~


因為板橋距離住的地方實在太過遙遠,
於是就提早一個小時出發.
沒想到竟然是最早到的耶! (我楊嘎李竟然也有這一天)
發現附近的油庫口麵線超多人在排隊,

就無視等等即將要吃火鍋硬是跑去買了一個綜合麵線,
坐在梁季門口吃起來啦!

還在蓋子上標名辣度真是相當貼心! ($35 NTD)
蚵仔跟大腸都蠻好吃的,
麵線的濃綢程度剛剛好還帶了個煙薰味蠻神奇的,
不知道是本來就有的味道還是旁邊烤香腸的煙飄過來XD

慌慌張張的在梁季門口吃完麵線後大家也都全到齊啦!

店內好多茂伯的照片跟簽名看來應該是常客吧!

我點的番茄鴨血豆腐鍋配豬肉,
鴨血很入味超好吃,
番茄湯還不錯(喝了幾口喬黑點的清燉湯頭覺得比較好喝)
高麗菜就完全沒煮爛讓我很傷心,

冬粉帶有點肉桂味,
有先煮好再送上來真是相當不錯!

吃喝的同時也一邊閒聊.
沒想到多分今年四月才開始買broad game現在就已經累積了8套!!
貼接因為週末不想到公司就跑來台北了~

吃飽之後我們也不好意思一直佔著座位,
想不到有什麼地方好去的於是就跑到板橋火車站前面的公園啦!
菜頭一直因為地圖被嗆XD
校長泛舟跟溯溪傻傻分不清處,
然後我們也回憶起了之前的班遊去了哪些地方~

最奇妙的就是,
喬黑發現疑似北斗七星於是大家都開始觀星XD
at很認真的在尋找迷樣的第四顆星,
菜頭竟然還知道北斗七星勺子口的兩顆星延伸五倍距離就可以找到北極星,
貼街記得夏季大三角是哪三顆星星.
真是記憶魔人啊!

最後就在甜甜鬼急著回家出團的情況下,
大家就歡樂的解散啦!