Android Option Menus 是android的主要菜单。它们可用于设置(settings),搜索(search),删除(delete)项目等。
在这里,无涯教程将看到两个选项菜单示例。首先是简单的选项菜单,其次是带有图像的选项菜单。
无涯教程通过调用MenuInflater类的inflate()方法来使菜单膨胀。要对菜单项执行事件处理,您需要重写Activity类的onOptionsItemSelected()方法。
选项菜单示例
让无涯教程看看如何在android中创建菜单。让无涯教程看一下包含三个菜单项的简单选项菜单示例。
无涯教程在此文件中只有一个TextView。
File: activity_main.xml
<!--?xml version="1.0" encoding="utf-8"?--> <android.support.design.widget.coordinatorlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.learnfk.com.optionmenu.MainActivity"> <android.support.design.widget.appbarlayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popuptheme="@style/AppTheme.PopupOverlay"></android.support.v7.widget.toolbar> </android.support.design.widget.appbarlayout> <include layout="@layout/content_main"></include> </android.support.design.widget.coordinatorlayout>
File: context_main.xml
<!--?xml version="1.0" encoding="utf-8"?--> <android.support.constraint.constraintlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="example.learnfk.com.optionmenu.MainActivity" tools:showin="@layout/activity_main"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintbottom_tobottomof="parent" app:layout_constraintleft_toleftof="parent" app:layout_constraintright_torightof="parent" app:layout_constrainttop_totopof="parent"></textview> </android.support.constraint.constraintlayout>
它包含三个项目,如下所示。它是在res/menu目录中自动创建的。
File: menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="example.learnfk.com.optionmenu.MainActivity"> <item android:id="@+id/item1" android:title="Item 1"></item> <item android:id="@+id/item2" android:title="Item 2"></item> <item android:id="@+id/item3" android:title="Item 3" app:showasaction="withText"></item> </menu>
此类显示Menu.xml文件的内容,并在单击菜单项时执行事件处理。
File: MainActivity.java
package example.learnfk.com.optionmenu;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">protected</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> onCreate</span><span class="pun">(</span><span class="typ">Bundle</span><span class="pln"> savedInstanceState</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">super</span><span class="pun">.</span><span class="pln">onCreate</span><span class="pun">(</span><span class="pln">savedInstanceState</span><span class="pun">);</span><span class="pln">
setContentView</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">layout</span><span class="pun">.</span><span class="pln">activity_main</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Toolbar</span><span class="pln"> toolbar </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="typ">Toolbar</span><span class="pun">)</span><span class="pln"> findViewById</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">toolbar</span><span class="pun">);</span><span class="pln">
setSupportActionBar</span><span class="pun">(</span><span class="pln">toolbar</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">boolean</span><span class="pln"> onCreateOptionsMenu</span><span class="pun">(</span><span class="typ">Menu</span><span class="pln"> menu</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="com">//Inflate the menu; 如果存在,这会将项目添加到操作栏。</span><span class="pln">
getMenuInflater</span><span class="pun">().</span><span class="pln">inflate</span><span class="pun">(</span><span class="pln">R</span><span class="pun">.</span><span class="pln">menu</span><span class="pun">.</span><span class="pln">menu_main</span><span class="pun">,</span><span class="pln"> menu</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="lit">@Override</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">boolean</span><span class="pln"> onOptionsItemSelected</span><span class="pun">(</span><span class="typ">MenuItem</span><span class="pln"> item</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> id </span><span class="pun">=</span><span class="pln"> item</span><span class="pun">.</span><span class="pln">getItemId</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">switch</span><span class="pln"> </span><span class="pun">(</span><span class="pln">id</span><span class="pun">){</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">item1</span><span class="pun">:</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="str">"Item 1 Selected"</span><span class="pun">,</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">item2</span><span class="pun">:</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="str">"Item 2 Selected"</span><span class="pun">,</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">case</span><span class="pln"> R</span><span class="pun">.</span><span class="pln">id</span><span class="pun">.</span><span class="pln">item3</span><span class="pun">:</span><span class="pln">
</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">makeText</span><span class="pun">(</span><span class="pln">getApplicationContext</span><span class="pun">(),</span><span class="str">"Item 3 Selected"</span><span class="pun">,</span><span class="typ">Toast</span><span class="pun">.</span><span class="pln">LENGTH_LONG</span><span class="pun">).</span><span class="pln">show</span><span class="pun">();</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">;</span><span class="pln">
</span><span class="kwd">default</span><span class="pun">:</span><span class="pln">
</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">super</span><span class="pun">.</span><span class="pln">onOptionsItemSelected</span><span class="pun">(</span><span class="pln">item</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
输出无需单击菜单按钮。

单击菜单按钮后输出。

单击第二个菜单项后输出。

选项菜单与图标
您需要在res/drawable目录中具有图标图像。 android:icon元素用于在选项菜单上显示图标。您可以在strings.xml文件中写入字符串信息。但是无涯教程已经将它写在menu_main.xml文件中。
File: menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="example.learnfk.com.optionmenu.MainActivity"> <item android:id="@+id/item1" android:title="Item 1" app:showasaction="always" android:icon="@android:drawable/btn_star"></item> <item android:id="@+id/item2" android:title="Item 2" app:showasaction="ifRoom" android:icon="@android:drawable/btn_plus"></item> <item android:id="@+id/item3" android:title="Item 3" app:showasaction="withText" android:icon="@android:drawable/btn_plus"></item> </menu>
