无涯教程-Android - Option Menu

44 阅读2分钟

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">

}

输出无需单击菜单按钮。

android option menu example 1

单击菜单按钮后输出。

android option menu example 2

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

android option menu example 3

选项菜单与图标

您需要在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>
android option menu example 4android option menu example 5

参考链接

www.learnfk.com/android/and…