码迷,mamicode.com
首页 > 其他好文 > 详细

Action bar的菜单栏

时间:2016-06-21 07:49:35      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:

Action bar允许你为与当前应用上下文相关的最重要的action items添加action按钮。那些直接显示在action bar上的icon或者文字都被称作action buttons。那些不适合action bar或者不是那么重要的Actions将会被隐藏在action overflow(译者注:action bar最右侧的垂直的三个点)里。

技术分享

图1. 一个包含Search功能的action button和用来展示附加action的action overflow。

在XML文件中指定Actions

所有的action buttons和能够在action overflow中访问到的action都是在一个XML menu resource中被定义的。要为action bar添加actions,首先在项目的res/menu/ 目录下创建一个新的XML文件。

为所有你想要添加到action bar中的item添加一个<item> 元素。例如:

res/menu/main_activity_actions.xml

<span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><menu</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">xmlns:android</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- Search, should appear as action button --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><item</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:id</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@+id/action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:icon</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@drawable/ic_action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:title</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@string/action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:showAsAction</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"ifRoom"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">/></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- Settings, should always be in the overflow --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><item</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:id</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@+id/action_settings"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:title</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@string/action_settings"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:showAsAction</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"never"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">/></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></menu></span>

上面的XML文件声明了Search action在action bar有空间的时候会展示为action button,而Setting action始终都要出现在overflow中。 (默认情况下,所有的actions 都出啊先在overflow中,但是为每个action声明不同的设计意图其实是件好事。)

icon 属性需要指定一个图片资源ID。以@drawable/ 开头的资源必须是你以同样的名字存放在项目的res/drawable/ 目录下的资源。例如,"@drawable/ic_action_search" 表示ic_action_search.png。同样的,title 属性使用的是一个字符串资源,它在项目的res/values/ 目录下的XML文件中被定义,就像在 Building a Simple User Interface中讨论的那样。

提示: 当为应用创建icons或者其他bitmap图片时,为不同的屏幕密度提供不同的优化的版本相当重要。这个话题会在Supporting Different Screens中有更多的讨论。

如果你的应用在使用Support LibraryshowAsAction属性并不能使用android: 这个命名空间。作为替代这个属性是由Support Library提供,并且你需要定义自己的XML命名空间同时使用它作为这个属性的前缀。(自定义的XML命名空间应该基于应用名称,但是你也可以取一个你想要的名字,同时它只在你声明过的它的文件中有效。) 例如:

res/menu/main_activity_actions.xml

<span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><menu</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">xmlns:android</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"http://schemas.android.com/apk/res/android"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
      </span><span style="list-style: none; margin: 0px; padding: 0px; color: inherit;"><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">xmlns:yourapp</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"http://schemas.android.com/apk/res-auto"</span></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- Search, should appear as action button --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><item</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:id</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@+id/action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:icon</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@drawable/ic_action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:title</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@string/action_search"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
          </span><span style="list-style: none; margin: 0px; padding: 0px; color: inherit;"><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">yourapp:showAsAction</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"ifRoom"</span></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">  </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">/></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    ...
</span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></menu></span>
<span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></span><pre id="best-content-1980789976" accuse="aContent" class="best-text mb-10" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, "courier new", courier, 宋体, monospace, "Microsoft YaHei"; white-space: pre-wrap; word-wrap: break-word; font-size: 14px; color: rgb(51, 51, 51); line-height: 24px; background-color: rgb(243, 255, 236);">showAsAction属性共有五个值:ifRoom、never、always、withText、collapseActionView,可以混合使用。

    ifRoom    会显示在<a target=_blank href="https://www.baidu.com/s?wd=Item&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uHbznARLuhDsmvFbm1-90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHTdPjb1nHD3P10drHDsrHRYr0" target="_blank" class="baidu-highlight" rel="nofollow" style="color: rgb(45, 100, 179); text-decoration: none;">Item</a>中,但是如果已经有4个或者4个以上的<a target=_blank href="https://www.baidu.com/s?wd=Item&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uHbznARLuhDsmvFbm1-90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHTdPjb1nHD3P10drHDsrHRYr0" target="_blank" class="baidu-highlight" rel="nofollow" style="color: rgb(45, 100, 179); text-decoration: none;">Item</a>时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定    
    never    永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义<a target=_blank href="https://www.baidu.com/s?wd=item&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uHbznARLuhDsmvFbm1-90ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHTdPjb1nHD3P10drHDsrHRYr0" target="_blank" class="baidu-highlight" rel="nofollow" style="color: rgb(45, 100, 179); text-decoration: none;">item</a>的时候,最好把标题都带上。    
    always    无论是否溢出,总会显示。    
    withText    withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。    
   collapseActionView      声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。
一般要配合ifRoom一起使用才会有效果。


为Action Bar添加Actions

为了让刚才的menu items显示在action bar上,在你的activity中实现onCreateOptionsMenu() 这个回掉方法,并且为给定的参数Menu 对象设置对应的/menu目录下的XML文件。例如:

<span class="lit" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 102, 102);">@Override</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">public</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">boolean</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> onCreateOptionsMenu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">Menu</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> menu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;">// Inflate the menu items for use in the action bar</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="typ" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">MenuInflater</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> inflater </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> getMenuInflater</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    inflater</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">inflate</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">menu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">main_activity_actions</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">,</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> menu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">return</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">super</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">onCreateOptionsMenu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">menu</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span>
响应Action Buttons

当用户点击任何一个action buttons 或者overflow中的action item,系统都会调用onOptionsItemSelected() 方法。在你对这个方法的实现中,调用参数MenuItem对象的getItemId()来获取表示被点击的item的资源ID,这个值是你在相应的<item> 元素中声明的android:id 属性的值。

<span class="lit" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 102, 102);">@Override</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">public</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">boolean</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> onOptionsItemSelected</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">MenuItem</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> item</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;">// Handle presses on the action bar items</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">switch</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">item</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">getItemId</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">())</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">case</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> R</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">action_search</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">:</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            openSearch</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">return</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">true</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">case</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> R</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">id</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">action_settings</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">:</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            openSettings</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">();</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">return</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">true</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">;</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">default</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">:</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">return</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">super</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">onOptionsItemSelected</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">item</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span>
为低版本的Activity添加Up按钮

技术分享

Figure 4. The Up button in Gmail.

在你的应用中,只要不是你的应用入口activity(activities that are not the "home" screen) 的所有activity都应该提供一个返回自己在应用层次结构中的逻辑父界面,通过点击action bar上的Up按钮。

当运行在Android 4.1 (API level 16) 或者更高版本的系统上时,或者当使用Support Library包提供的ActionBarActivity 时,使用Up导航需要你在manifest文件中声明父activity,同时启用action bar的Up按钮。

例如,下面显示如何在manifest文件中定义一个父activity:

<span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><application</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> ... </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    ...
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- The main/home activity (it has no parent activity) --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><activity</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:name</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"com.example.myfirstapp.MainActivity"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> ...</span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        ...
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></activity></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- A child of the main activity --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><activity</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:name</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"com.example.myfirstapp.DisplayMessageActivity"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:label</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"@string/title_activity_display_message"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:parentActivityName</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"com.example.myfirstapp.MainActivity"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;"><!-- Parent activity meta-data to support 4.0 and lower --></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
        </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"><meta-data</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:name</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"android.support.PARENT_ACTIVITY"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
            </span><span class="atn" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 34, 136);">android:value</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">=</span><span class="atv" style="list-style: none; margin: 0px; padding: 0px; color: rgb(136, 0, 0);">"com.example.myfirstapp.MainActivity"</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">/></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></activity></span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="tag" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);"></application></span>

然后通过调用setDisplayHomeAsUpEnabled()方法启用action bar的Up按钮:

<span class="lit" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 102, 102);">@Override</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">public</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">void</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> onCreate</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="typ" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 0, 102);">Bundle</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> savedInstanceState</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">)</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);"> </span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">{</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">super</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">onCreate</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">savedInstanceState</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    setContentView</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">R</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">layout</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">.</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">activity_displaymessage</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">

    getSupportActionBar</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">().</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">setDisplayHomeAsUpEnabled</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">(</span><span class="kwd" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 136);">true</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;">// If your minSdkVersion is 11 or higher, instead use:</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
    </span><span class="com" style="list-style: none; margin: 0px; padding: 0px;">// getActionBar().setDisplayHomeAsUpEnabled(true);</span><span class="pln" style="list-style: none; margin: 0px; padding: 0px; color: rgb(0, 0, 0);">
</span><span class="pun" style="list-style: none; margin: 0px; padding: 0px; color: rgb(102, 102, 0);">}</span>

由于现在系统知道MainActivity 是DisplayMessageActivity的父activity,当用户点击 Up button时,系统会自动导航到何时的父activity中——你没有必要处理Up button的点击事件。

Action bar的菜单栏

标签:

原文地址:http://blog.csdn.net/qq_34015057/article/details/51701273

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!