2010年7月27日 星期二

Android Menu 建立

首先在Res資料夾裡面再新增一個"menu"
然後在裡面新增一個Android的XML檔案
檔名自取 然後選menu 接下來就可以自己新增Item跟群組了
最後在程式碼區塊再利用下面的做動作

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.我設定的XML名稱, menu);
return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
int item_id = item.getItemId();

switch (item_id){
case R.id.我設定的ITEM_ID: break;
case R.id.我設定的ITEM_ID: break;
default: return false;
}
return true;
}

2010年7月20日 星期二

Android 多個 Button Listener

當我使用到很多個Button時候,並不希望每個Button,
都新增一個相對應的callback。(假如有10個都要聆聽不同事件,這將會是一個很可觀的程式碼)
這時有兩種方法可以解決
第一種 實作聆聽事件
public class ClassName extends Activity implements OnClickListener,OnTouchListener
當我們宣告要實作後 便會有他要實作的Method

public void onClick(View v) {}//這是單擊事件
public boolean onTouch(View v, MotionEvent event){}//這是觸碰事件

之後我們就可以用她回傳的參數 v.getId() 來判斷是哪一個觸發的
switch(v.getId()){
case R.id.資源名稱:break;
}

第二種 在XML做宣告
直接在XML該元件中新增一個Method名稱,來表示要使用這個Method
android:onClick="ClickHandler"

然後在主要程式裡面跟上面方法相同

public void ClickHandler(View v)
{
switch(v.getId()){
case R.id.資源名稱:break;
}
}

2010年7月19日 星期一

Activity onTouchEvent

當我們創建一個基本的Android時候
通常會繼承Activity
而這個Activity會有一個觸碰的事件可以讓我們捕捉
public boolean onTouchEvent(MotionEvent event)
只要我們一碰螢幕他就會把MotionEvent 的物件給傳送進去這個function
我們可以透過這物件取得現在的各種動作與紀錄
/*這可以取得目前觸碰的螢幕座標X-Y*/
float x = event.getX();
float y = event.getY();
而MotionEvent可以透過getAction()來取得動作
event.getAction();
我們可以利用他回傳的參數來做判斷
switch (event.getAction()){
case MotionEvent.ACTION_DOWN://碰到瞬間break;
case MotionEvent.ACTION_MOVE://移動break;
case MotionEvent.ACTION_UP://離開螢幕break;
}
當然不只有這些參數
有興趣可以參考Android 官方網站的API
MotionEvent
當我想在這螢幕實作Click時。(我所要的click是必須要瞬擊,而不是他押很久放開也算click的話)
我嘗試在ACTION_UP裡面做了一個判斷

long diffTime=event.getEventTime()-event.getDownTime();
if(diffTime<120){
//do click
}
我可以藉由取得按下時間跟放開時間的差來判斷他

emulator: ERROR

emulator: ERROR: the user data image is used by another emulator. aborting
當eclipse開啟Android模擬器時,出現這個錯誤直接前往
C:\Documents and Settings\使用者電腦名稱\.android\avd\自創模擬器名稱.avd\userdata-qemu.img.lock
裡面的pid檔案刪除重開即可。

2010年7月4日 星期日

搜尋此網誌