6

如何在我的android應用程序中實現選項菜單?我嘗試了Android Developer的代碼,但我得到錯誤。如這些:元素菜單必須聲明爲。這裏是我的代碼在Android Studio中實現選項菜單

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.lucavanraalte.test" > 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" > 

    <activity android:name=".MainActivity" android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 

    </activity> 
</application> 

</manifest> 

enter image description here

+0

你把它放錯了地方,不要把它放到你的Manifest.xml但把它在你的(YourActivity)。xml你在哪裏創建你的活動佈局 – Strider

+0

我不知道這是否只是你在你的問題中格式化代碼的方式,但任何菜單文件都需要在'menus'子目錄中有' res'文件夾 - 它不應該是清單的一部分。 – PPartisan

+0

我需要把它放在哪裏,然後放什麼?我是否需要創建一個新文件夾?查看上面的圖片 – Lucafraser

回答

15

在Java代碼中,添加此onCreateOptionsMenu顯示optionMenu,

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.option_menu, menu); //your file name 
     return super.onCreateOptionsMenu(menu); 
    } 

保持你的在res \ menu \ option_menu文件夾下,

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 

現在,如果你想設置爲OU可以使用onOptionsItemSelected即onClick事件,

@Override 
    public boolean onOptionsItemSelected(final MenuItem item) { 

     switch (item.getItemId()) { 
      case android.R.id.new_game: 
       //your code 
       // EX : call intent if you want to swich to other activity 
       return true; 
      case R.id.help: 
       //your code 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
+0

解決了您的問題? @Lucafraser –

+0

那麼問題解決了,但我該如何添加選項?我不應該在我的應用程序中看到菜單徽標? – Lucafraser

+0

如果您按照此代碼現在添加您的選項。嘗試運行代碼並再次通知。 –

1

您需要在res目錄下創建一個menu文件夾,並在菜單目錄中創建一個名爲my_menu.xml文件。在該文件中寫入這些行:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
    android:icon="@drawable/ic_new_game" 
    android:title="@string/new_game" 
    android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
    android:icon="@drawable/ic_help" 
    android:title="@string/help" /> 
</menu> 

然後在你的活動,這樣做:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 
    return true; 
} 
+0

將第二部分添加到我的MainActivity.java時,出現「無法解析符號(如Inflater)」等錯誤 – Lucafraser

1

您需要在目錄水庫創建menu.xml>像菜單菜單

<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/new_game" 
android:icon="@drawable/ic_new_game" 
android:title="@string/new_game" 
android:showAsAction="ifRoom"/> 
<item android:id="@+id/help" 
android:icon="@drawable/ic_help" 
android:title="@string/help" /> 
</menu> 

然後,你需要創建活動從你的菜單與下面的代碼

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    int id = item.getItemId(); 
    if (id == R.id.help) { 

     //do something 
     return true; 
    } 
    if (id == R.id.new_game) { 

     //do something 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
3

您應該使用onCreateOptionsMenu (Menu menu)

初始化活動標準選項菜單的內容。您應該將菜單項放入菜單中。

這隻被調用一次,第一次顯示的選項菜單是 。要在每次顯示菜單時更新菜單,請參閱 onPrepareOptionsMenu(菜單)。

onCreateOptionsMenu(菜單菜單)方法,該方法需要在活動類重寫。這會創建菜單並返回布爾值。 inflate從XML資源膨脹一個菜單層次結構。

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.option_menu, menu); // set your file name 
     return super.onCreateOptionsMenu(menu); 
    } 

option_menu.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_First" 
      android:title="@string/item_First" 
      android:showAsAction="ifRoom"/> 
    <item android:id="@+id/save_menu" 
      android:title="@string/save" 
      android:showAsAction="ifRoom"/> 
    <item android:id="@+id/item_Second" 
      android:title="@string/item_First" 
      android:showAsAction="ifRoom"/> 

</menu> 

請檢查演示Android Option Menu Example

相關問題