iT邦幫忙

DAY 22
4

Android 學習手札系列 第 22

Day 22 - Android - 任意門

  • 分享至 

  • xImage
  •  

昨天知道了如何從 AndroidManifest.xml 來設定每個 app 的進入點,可是還好像還是少了什麼感覺,要如何在不調動 AndroidManifes.xml 進入點設定,讓每個 activity 都能夠進入那個沒有被串連到的 activity 呢?
相信各位一定都有想到,不是設定個按鈕讓每個 activitiy 都串連過去就好了嗎?但是,這麼一來,我們不就要在介面中再擠進一個元素嗎?也許有些時候會覺得多了該元件是一件很破壞畫面的事情呢!所以我們今天要來介紹一個一直被我們忽視的預設資源:「MENU」。

在我們每次建立一個 activity 時,系統都會預設為我們加入一個 menu 的設定,而該 menu 就只有一個名為"setting"的無動作按鈕。

而這個 menu 正是我們可以利用手機實體按鍵彈出來的東西,完全不用擔心他會佔到我們的介面上的一絲一毫之地,所以,接下來請各位繼續延用昨天的範例,並命名為「Day22_Menu」,同時在到「AndroidManifest.xml」裡面將進入的main activity設定回MoogleActivity,忘記的請再自行回到昨日的範例去看哦~

接下來就隨意將menu裡的其中一個檔案複製改名為 moogle.xml 接著打開他可以看到類似下面這樣的畫面

可以看到中間的 "Menu Elements" 也就是選單裡有一個元素,他的名稱是由右手邊的"Id"屬性設定,這也是我們在程式碼中要取得的名稱。而 "title" 屬性就要請各位自行在 strings.xml 裡去設定一個新的字串「menu_list」內容是「清單」,而 "icon" 屬性就如同各位所看到,這邊是先拿已預設放在drawable-hdpi裡的一個icon來放置。這個屬性若是有設定的話,在選單按鈕的文字上方就會出現這個icon,反之當然就沒有了,只是~現在在新的版本會有個問題,就是預設的樣式是不會出圖示的,但是在2.X的版本仍是會出現!
這邊先設定好這個選單元素後,就是要進到 MoogleActivity.java 裡定義選單物件了

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //設定我們定義好的選單元件
    //給定的名稱就是用「R.menu.moogle」
    getMenuInflater().inflate(R.menu.moogle, menu);
    return true;
}

如此一來,我們就能看到下面這個畫面

不過,這個時候仍無法使之有動作,所以再來就是對他設定動作啦!設定動作我們得要用到「onOptionsItemSelected(MenuItem item)」這個系統函式

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //使用這個函式時,系統會為我們傳入這個被選到的選單元件
    //而這邊就是用 <strong>item.getItemId()</strong> 這個方法來得判斷是哪個選單被按到的
    switch(item.getItemId()){
        case R.id.menu_moogle:
            Intent intent = new Intent(this, Moogle3Activity.class);
            startActivity(intent);
            break;
        }
    //這一行一定不能少
    return super.onOptionsItemSelected(item);
}

如此一來就能夠讓這個選單能直接跳到 Moogle3 那邊去看角色名單啦~
再來請各位如法泡製,設定 Moogle2Activity 的選單功能嘍。

最後,再來帶各位看看如何無中生有出選單來,請打開"ChocoboActivity.java"
然後記得一件事情,我們要做出選單功能來有兩個系統函式不能少,一個是"產生選單":onCreateOptionsMenu(Menu menu);另外一個是"建立選單動作":onOptionsItemSelected(MenuItem item)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    /* 建立選單元素 */
    
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    /* 設定選單動作 */
    return super.onOptionsItemSelected(item);
}

所以這裡要做的事情是這樣的

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    //設定一個選單元素,這邊的參數依序如下說明
    //0: 屬於哪個選單群組
    //Menu.FIRST: 選單元素的id
    //0: 第幾個順位
    //getResources().getString(R.string.menu_list: 選單名稱
    menu.add(0, Menu.FIRST, 0, getResources().getString(R.string.menu_list))
        //設定icon
        .setIcon(android.R.drawable.ic_menu_agenda);
    
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    //這邊的動作就跟上面一樣嘍
    switch(item.getItemId()){
        //因為是id,所以要記得這時候的id,是被設定為Menu.FIRST哦!
        case Menu.FIRST:
	    Intent intent = new Intent(this, Moogle3Activity.class);
            startActivity(intent);
            break;
    }
    return super.onOptionsItemSelected(item);
}

Day 21 - Android - 化身《 》Day 23 - Android - 不要問我從哪裡來


上一篇
Day 21 - Android - 化身
下一篇
Day 23 - Android - 不要問我從哪裡來
系列文
Android 學習手札30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ted99tw
iT邦高手 1 級 ‧ 2012-12-20 15:39:56

Mosil大的文章真是循循善誘,讚啦~~

讚讚

我要留言

立即登入留言