Android编程权威指南(第二版)第十三章-工具栏

优秀的Android应用都注重设计工具栏。工具栏可安置菜单选项、提供应用导航,还能帮助统一设计风格、塑造品牌形象。Android 5.0(Lollipop)引入了工具栏这个新增组件。 Lollipop之前,应用中用于导航或提供菜单操作的是操作栏。,工具栏与操作栏有些类似,工具栏更加美观。使用AppCompat库,这样一来,工具栏就可以兼容到最低API 7Android2.1的版本了。

POINT 1 menu

菜单是一种类似于布局的资源。创建菜单定义文件并放置在res/menu目录下,Android会自动生成相应的资源ID。随后,在代码中实例化菜单时,就可以直接使用。在res目录下右键选择新建resource file后,在resource type选择menu资源类型。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
  <item
    android:id="@+id/menu_item"
    android:icon="@android:drawable/***"//系统内置的图标
    android:title="@string/***"
    app:showAsAction="ifRoom|withText"/>
</menu>

showAsAction这里使用的命名空间是app,showAsAction属性用于指定菜单选项是显示在工具栏上,还是隐藏于溢出菜单(overflow menu)。该属性当前设置为ifRoom和withText的组合值。因此,只要空间足够,菜单项图标及其文字描述都会显示在工具栏上。如空间仅够显示菜单项图标,文字描述就不会显示。如空间大小不够显示任何项,菜单项就会隐藏到溢出菜单中。

Fragment有一套自己的选项菜单回调函数,以下为创建菜单和响应菜单项选择事件的两个回调方法:
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){

  //实例化选项菜单

  super.onCreateOptionsMenu(menu, inflater);
  inflater.inflate(R.menu.menu_name, menu);

}
public boolean onOptionsItemSelected(MenuItem item){

  //设置菜单项选择事件的响应

  switch (item.getItemId()) {
    case R.id.item_name1:

      //do something

    case R.id.item_name2:

      //do something else

    defualt:

      //......

  }

}

那么我们还需要在Fragment.onCreate()方法中,使用下面的方法通知FragmentManager需接收选项菜单方法回调。public void setHasOptionsMenu(boolean hasMenu)

setHasOptionsMenu(true);

在菜单中还有子标题的菜单选项,调用setSubtitle就可以设置

AppCompatActivity activity = (AppCompatActivity) getActivity();

activity.getSupportActionBar().setSubtitle("subtitle_string");

 

POINT 2 层级式导航

后退键导航又称为临时性导航,
只能返回到上一次浏览过的用户界面;而层级式导航(hierarchical navigation,有时又称为ancestral navigation)可在应用内逐级向上导航。有了层级式导航,用户可点击工作栏左边的向上按钮向上导航。在Jelly Bean(API 16级)设备上,可轻松实现层级式导航。但在这之前,开发者只能自己动手处理向上按钮的显示和点击事件。

启用向上按钮(修改AndroidManifest中,在低等级的activity标签中添加parentActivityName属性)

<activity
  android:name=".ChildremActivity"
  android:label="@string/app_name"
  android:parentActivityName=".ParentActivity">
</activity>

posted @ 2017-03-10 18:57  HeLing_CC  阅读(132)  评论(0)    收藏  举报