Tuesday, April 26, 2011

如何在android app裡面使用tab以及新增activity


因為Project的需要,這幾天研究了一下要如何在Android APP中使用Tab元件,原本照著Android Developers(http://developer.android.com/resources/tutorials/views/hello-tabwidget.html)裡面的步驟依樣畫葫蘆,以為簡簡單單就可以搞定,沒想到踢到了鐵板@@...在一番的研究之後發現原來是我產生Activity的方式不對;我原本天真的以為直接在src folder裡面加上我需要的.java檔案就可以運作,結果發現build project都沒有問題,但是一旦deploy到simulator上怎樣都跑不出畫面,原來正確的作法是必須如下

1.在你自己的package上按右鍵選擇New->Class





2.在出現的對話框的Name欄位填入要產生Activity的Class名字,然後按下Superclass這個欄位的"Browse..."這個按鈕後會跳出另一個對話框,選擇Activity-android.app後按Finish按鈕完成。





3. 完成後會自動產生Settings.java檔案,我在裡面加上了onCreate method如下來輸出"This is the Settings tab":

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView textview = new TextView(this);
        textview.setText("This is the Settings tab");
        setContentView(textview);
    }


完成了新增class的動作後再來就是處理AndroidManifest.xml,步驟如下:

1.在Project Explorer中點選並打開AndroidManifest.xml;
2.選擇Application這個tab
3.選擇Application nodes
4.點選"Add..."這個按鈕



5.在跳出的對話框中選擇Activity
6.選OK

 

7.此時會出現Attributes for Activity的表單,按下Name這個欄位的"Browse..."來展開對話框
8.在對話框會有剛剛新增的Settings這個Activity選項,選擇他
9.按OK後存檔




10.最後開啟AndroidManifest.xml確認有Settings這個Activity加入,也就是在檔案裡會有一行這個東西;這邊有個小地方要注意的事所有AndroidManifest.xml裡的activity tag需要連續,我在測是的時候就因為我在中途加入了一個service tag而導致程式無法運作...我猜應該是google的bug...(P.S.如果你覺得步驟1~9真的太麻煩,也可以直接打開AndroidManifest.xml然後在裡面加上這一行)。

 


重複如上的步驟在產生所有需要Tab的Activity,最後就是在你繼承TabActivity這個物件的onCreate這個method加入產生tab的程式碼如下例:

        TabHost tabHost = getTabHost();  // The activity TabHost

        tabHost.addTab(tabHost.newTabSpec("settings")
                .setIndicator("Settings")
                .setContent(new Intent(this, Settings.class)));
        tabHost.addTab(tabHost.newTabSpec("panel")
                .setIndicator("Panel")
                .setContent(new Intent(this, Panel.class)));
        tabHost.addTab(tabHost.newTabSpec("devices")
                .setIndicator("Devices")
                .setContent(new Intent(this, Devices.class)));
        tabHost.addTab(tabHost.newTabSpec("captureevents")
                .setIndicator("Capture Events")
                .setContent(new Intent(this, CaptureEvents.class)));
        tabHost.setCurrentTab(0);

最後,把模擬器跑起來就會看到如下 的Tab GUI產生:

 


其實只要是操作過一次,下次要作就很簡單,但是對剛入門的新手,要注意的小地方真是有點多,所以在此紀錄一下心得,也給有需要的人參考...





No comments:

Post a Comment