iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
1
Software Development

[Andriod] Andriod Studio 從入門到進入狀況系列 第 20

[Day 19] 我的第一個Android程式 - BMI程式設計(十) 加入選單MENU

  • 分享至 

  • xImage
  •  

終於回到我們的BMI程式了,
今天的主題是加入選單MENU,

首先我們要新增一個MENU,

在res上按右鍵 → New → Android Resource Directory
https://ithelp.ithome.com.tw/upload/images/20181025/201056941I2XAwXWQZ.png

輸入資料夾名稱為menu,Resource type選擇為menu,Source set預設即為main,點選OK
https://ithelp.ithome.com.tw/upload/images/20181025/20105694WziUhYu4tV.png

接下來在menu資料夾上按右鍵 → New → Menu resource file
https://ithelp.ithome.com.tw/upload/images/20181025/20105694B2k4yYVFh1.png

輸入檔案名稱為menu_main,Srouce set預設即為main,Directory name為menu不變,點選OK
https://ithelp.ithome.com.tw/upload/images/20181025/20105694YFfWS2Je4r.png

編輯menu_main.xml如下

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res-auto/android">
    <items android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
</menu>

item元素中可為其設定「app:showAsAction」屬性,可使用以下值:

  • never:不會顯示在Action區域
  • ifRoom:若Action區域有空間,就會顯示
  • always:無論如何都會顯示在Action區域上,但不建議使用此值
  • withText:除了icon圖示外,也顯示item的標題文字

接下來在主程式加入以下內容

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

說明如下

  • getMenuInflater().inflate(R.menu.menu_main, menu);
    先呼叫Activity的getMenuInflater方法得到「MenuInflater物件」,它是一個專門用來產生選單的類別,呼叫inflate方法可讀取一個Menu設計圖(XML檔),依照設計圖產生menu物件。就像是充氣機,設計圖就是還未灌氣的氣球。因此,在專案中的「/res/menu/menu_main.xml」就是MainActivity的選單設計檔。
  • int id = item.getItemId();
    取得選單項目的id值,id值即為設計檔中為每個item所訂定的值。
  • if (id == R.id.action_settings)
    簡單判斷是否按下的是「Settings」項目,目前無任何處理的程式碼,直接回傳true。如果有多個選單項目,應將if判斷以switch…case改寫,可增加程式的可讀性並提昇日後維護的效率。

當然要

import android.view.Menu;
import android.view.MenuItem;

出來的畫面如下:

這是原本的畫面
https://ithelp.ithome.com.tw/upload/images/20181025/20105694yANJ2E4SL7.png

點擊上方菜單後的畫面
https://ithelp.ithome.com.tw/upload/images/20181025/20105694ksn6MOIXxS.png


上一篇
[Day 18] Android程式設計番外篇 - 元件觸發事件的四種方法(四)
下一篇
[Day 20] 我的第一個Android程式 - BMI程式設計(十一) 加入簡單的對話框
系列文
[Andriod] Andriod Studio 從入門到進入狀況33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
Zoey
iT邦新手 4 級 ‧ 2020-01-17 12:05:57

想請問文中程式碼android:showAsAction和app:showAsAction有什麼樣的差別嗎?
最近剛開始學習android 對這個還不太清楚,所以想問一下前面使用app和android有什麼差別嗎?

小魚 iT邦大師 1 級 ‧ 2020-01-17 14:17:57 檢舉

好像是...一樣的...
有可能是筆誤,
Android最近很少碰了,
你可以自己測試看看.

0
JUST MONIKA
iT邦新手 5 級 ‧ 2021-04-14 15:09:37
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res-auto/android">
    <items android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
</menu>

第3行的items要改成item才會顯示,但items也不會顯示錯誤或警告,就是消失了

0
JUST MONIKA
iT邦新手 5 級 ‧ 2021-04-14 15:11:37

android:showAsAction以改版成app:showAsAction

我要留言

立即登入留言