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