大圣的爹 發表於 2022-5-12 14:19:00

Android开发

<p>4、对话框与菜单的使用:</p>
<blockquote>
<p><br>Menu的使用方法</p>
<div>
<div>
<h2>1. 菜单的分类</h2>
<p>菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单、上下文菜单/上下文操作模式以及弹出菜单。它们的主要区别如下:</p>
<ul>
<li>选项菜单<br>
一个应用的主菜单项,用于放置对应用产生全局影响的操作,如搜索/设置。</li>
<li>上下文菜单<br>
用户长按某一元素时出现的浮动菜单。它提供的操作将影响所选内容,主要应用于列表中的每一项元素(如长按列表项弹出删除对话框)。上下文操作模式将在屏幕顶部栏(菜单栏)显示影响所选内容的操作选项,并允许用户选择多项,一般用于对列表类型的数据进行批量操作。</li>
<li>弹出菜单<br>
以垂直列表形式显示一系列操作选项,一般由某一控件触发,弹出菜单将显示在对应控件的上方或下方。它适用于提供与特定内容相关的大量操作。</li>


</ul>
<h2>2. 选项菜单</h2>
<h3>XML定义Menu</h3>
<p>使用XML和Java代码都可以创建Menu。但是在实际开发中,往往通过XML文件定义Menu,但Menu的部分条目需要动态显示,便需要采用java代码实现,使用XML做有以下几个好处:</p>
<ul>
<li>使用XML可以获得更清晰的菜单结构</li>
<li>将菜单内容与应用的逻辑代码分离</li>
<li>可以使用应用资源框架,为不同的平台版本、屏幕尺寸创建最合适的菜单(如对drawable、string等系统资源的使用)</li>


</ul>
<p>要定义Menu,我们首先需要在res文件夹下新建menu文件夹,它将用于存储与Menu相关的所有XML文件。</p>
<p>我们可以使用&lt;menu&gt;、&lt;item&gt;、&lt;group&gt;三种XML元素定义Menu,下面简单介绍一下它们:</p>
<ul>
<li>&lt;menu&gt;是菜单项的容器。&lt;menu&gt;元素必须是该文件的根节点,并且能够包含一个或多个&lt;item&gt;和&lt;group&gt;元素。</li>
<li>&lt;item&gt;是菜单项,用于定义MenuItem,可以嵌套&lt;menu&gt;元素,以便创建子菜单。</li>
<li>&lt;group&gt;是&lt;item&gt;元素的不可见容器(可选)。可以使用它对菜单项进行分组,使一组菜单项共享可用性和可见性等属性。</li>


</ul>
<p>其中,&lt;item&gt;是我们主要需要关注的元素,它的常见属性如下:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"><span class="token property">android<span class="token punctuation">:id:菜单项<span class="token punctuation">(MenuItem<span class="token punctuation">)的唯一标识
<span class="token property">android<span class="token punctuation">:icon:菜单项的图标(可选)
<span class="token property">android<span class="token punctuation">:title:菜单项的标题(必选)
<span class="token property">android<span class="token punctuation">:showAsAction:指定菜单项的显示方式。常用的有ifRoom、never、always、withText
<span class="token comment">/*
always:菜单项永远不会被收纳到溢出菜单中,因此在菜单项过多的情况下可能超出菜单栏的显示范围。
ifRoom:在空间足够时,菜单项会显示在菜单栏中,否则收纳入溢出菜单中。
withText:无论菜单项是否定义了icon属性,都只会显示它的标题,而不会显示图标。使用这种方式的菜单项默认会被收纳入溢出菜单中。
never:菜单项永远只会出现在溢出菜单中。*/
</span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p><strong>menu_test.xml</strong></p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-xml"><code class="language-xml"><span class="token prolog">&lt;?xml version="1.0" encoding="utf-8"?&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;menu <span class="token attr-name"><span class="token namespace">xmlns:android<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"http://schemas.android.com/apk/res/android<span class="token punctuation">"<span class="token punctuation">&gt;

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
      <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_delete<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:icon<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@android:drawable/ic_delete<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:showAsAction<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"always<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"delete<span class="token punctuation">" <span class="token punctuation">/&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
      <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_new<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:showAsAction<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"never<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"new<span class="token punctuation">" <span class="token punctuation">/&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
      <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_save<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:showAsAction<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"never<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"save<span class="token punctuation">" <span class="token punctuation">/&gt;

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
      <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_other<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:icon<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@android:drawable/ic_menu_more<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:showAsAction<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"ifRoom<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more<span class="token punctuation">"<span class="token punctuation">&gt;
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;menu<span class="token punctuation">&gt;
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
                <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_other_1<span class="token punctuation">"
                <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more1<span class="token punctuation">" <span class="token punctuation">/&gt;
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
                <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_other_2<span class="token punctuation">"
                <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more2<span class="token punctuation">" <span class="token punctuation">/&gt;
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/menu<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/item<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
      <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_more<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:icon<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@android:drawable/ic_menu_more<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:showAsAction<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"never<span class="token punctuation">"
      <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more<span class="token punctuation">"<span class="token punctuation">&gt;
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;menu<span class="token punctuation">&gt;
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
                <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_more_1<span class="token punctuation">"
                <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more1<span class="token punctuation">" <span class="token punctuation">/&gt;
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;item
                <span class="token attr-name"><span class="token namespace">android:id<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"@+id/file_more_2<span class="token punctuation">"
                <span class="token attr-name"><span class="token namespace">android:title<span class="token attr-value"><span class="token punctuation">=<span class="token punctuation">"more2<span class="token punctuation">" <span class="token punctuation">/&gt;
      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/menu<span class="token punctuation">&gt;
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/item<span class="token punctuation">&gt;
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/menu<span class="token punctuation">&gt;
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p><strong>MainActivity.java</strong></p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-java"><code class="language-java"><span class="token keyword">public <span class="token keyword">class <span class="token class-name">MainActivity <span class="token keyword">extends <span class="token class-name">Activity <span class="token punctuation">{
    <span class="token keyword">public <span class="token keyword">static <span class="token keyword">final <span class="token class-name">String TAG <span class="token operator">= <span class="token string">"breeze"<span class="token punctuation">;

    <span class="token annotation punctuation">@Override
    <span class="token keyword">protected <span class="token keyword">void <span class="token function">onCreate<span class="token punctuation">(<span class="token class-name">Bundle savedInstanceState<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">super<span class="token punctuation">.<span class="token function">onCreate<span class="token punctuation">(savedInstanceState<span class="token punctuation">)<span class="token punctuation">;
      <span class="token function">setContentView<span class="token punctuation">(<span class="token class-name">R<span class="token punctuation">.layout<span class="token punctuation">.activity_main<span class="token punctuation">)<span class="token punctuation">;
      <span class="token class-name">Log<span class="token punctuation">.<span class="token function">i<span class="token punctuation">(TAG<span class="token punctuation">, <span class="token string">"onCreate: "<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}

    <span class="token annotation punctuation">@Override
    <span class="token keyword">protected <span class="token keyword">void <span class="token function">onStart<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">super<span class="token punctuation">.<span class="token function">onStart<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
      <span class="token class-name">Log<span class="token punctuation">.<span class="token function">i<span class="token punctuation">(TAG<span class="token punctuation">, <span class="token string">"onStart: "<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}

    <span class="token annotation punctuation">@Override
    <span class="token keyword">protected <span class="token keyword">void <span class="token function">onResume<span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">super<span class="token punctuation">.<span class="token function">onResume<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;
      <span class="token class-name">Log<span class="token punctuation">.<span class="token function">i<span class="token punctuation">(TAG<span class="token punctuation">, <span class="token string">"onResume: "<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}

    <span class="token keyword">boolean shareSupport <span class="token operator">= <span class="token boolean">true<span class="token punctuation">;

    <span class="token annotation punctuation">@Override
    <span class="token keyword">public <span class="token keyword">boolean <span class="token function">onCreateOptionsMenu<span class="token punctuation">(<span class="token class-name">Menu menu<span class="token punctuation">) <span class="token punctuation">{
      <span class="token class-name">Log<span class="token punctuation">.<span class="token function">i<span class="token punctuation">(TAG<span class="token punctuation">, <span class="token string">"onCreateOptionsMenu: "<span class="token punctuation">)<span class="token punctuation">;
      <span class="token class-name">MenuInflater inflater <span class="token operator">= <span class="token keyword">new <span class="token class-name">MenuInflater<span class="token punctuation">(<span class="token keyword">this<span class="token punctuation">)<span class="token punctuation">;
      inflater<span class="token punctuation">.<span class="token function">inflate<span class="token punctuation">(<span class="token class-name">R<span class="token punctuation">.menu<span class="token punctuation">.menu_test<span class="token punctuation">, menu<span class="token punctuation">)<span class="token punctuation">;
      <span class="token comment">// 动态添加
      <span class="token keyword">if <span class="token punctuation">(shareSupport<span class="token punctuation">) <span class="token punctuation">{
            menu<span class="token punctuation">.<span class="token function">add<span class="token punctuation">(<span class="token class-name">Menu<span class="token punctuation">.NONE<span class="token punctuation">, <span class="token class-name">Menu<span class="token punctuation">.FIRST<span class="token punctuation">, <span class="token class-name">Menu<span class="token punctuation">.NONE<span class="token punctuation">, <span class="token string">"share"<span class="token punctuation">)<span class="token punctuation">;
      <span class="token punctuation">}
      <span class="token comment">// 返回true才会显示Menu
      <span class="token keyword">return <span class="token boolean">true<span class="token punctuation">;
    <span class="token punctuation">}

    <span class="token annotation punctuation">@Override
    <span class="token keyword">public <span class="token keyword">boolean <span class="token function">onPrepareOptionsMenu<span class="token punctuation">(<span class="token class-name">Menu menu<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">return <span class="token keyword">super<span class="token punctuation">.<span class="token function">onPrepareOptionsMenu<span class="token punctuation">(menu<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}

    <span class="token annotation punctuation">@Override
    <span class="token keyword">public <span class="token keyword">boolean <span class="token function">onOptionsItemSelected<span class="token punctuation">(<span class="token class-name">MenuItem item<span class="token punctuation">) <span class="token punctuation">{
      <span class="token keyword">switch <span class="token punctuation">(item<span class="token punctuation">.<span class="token function">getItemId<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">) <span class="token punctuation">{
            <span class="token keyword">case <span class="token class-name">R<span class="token punctuation">.id<span class="token punctuation">.file_delete<span class="token operator">:
                <span class="token keyword">break<span class="token punctuation">;
            <span class="token keyword">case <span class="token class-name">R<span class="token punctuation">.id<span class="token punctuation">.file_new<span class="token operator">:
                <span class="token keyword">break<span class="token punctuation">;
            <span class="token keyword">case <span class="token class-name">Menu<span class="token punctuation">.FIRST<span class="token operator">:
                <span class="token keyword">break<span class="token punctuation">;
      <span class="token punctuation">}
      <span class="token keyword">return <span class="token keyword">super<span class="token punctuation">.<span class="token function">onOptionsItemSelected<span class="token punctuation">(item<span class="token punctuation">)<span class="token punctuation">;
    <span class="token punctuation">}

<span class="token punctuation">}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
</div>
</div>

</blockquote><br><br>
来源:https://www.cnblogs.com/jzm20204139/p/16262293.html
頁: [1]
查看完整版本: Android开发