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>

浙公网安备 33010602011771号