ActionBar
Android的Title使用的是ActionBar的做法,而并非iOS的Title,因此Google给出了一套ActionBar组件
ActionBar适配所有机型【4.0以下、4.0系列、5.0系列、6.0系列】
Google给出了一套支持包来协助支持以前的机型。所以开发中可以使用支持包中的ActionBar。
支持包在SDK->extras->android->support->v7->appcompat
appcompat这个包中自带V4
加载appcompat类库
把V7里面的appcompat这个类库加载到你的工作空间里面。
ActionBar基础
创建ActionBar Activity
继承ActionBarActivity【注意全部使用android.support.v7.app包,否则不能支持以前的机器】
注册Activity的时候必须使用样式
<activity android:theme="@style/Theme.AppCompat.Light" ... >
添加 Action Item
- 设计菜单资源【res/menu】,创建出action Item
在设置菜单项目的时候基本属性有
- id 定义菜单ID,用于以后的事件
- icon 定义菜单的图标【大小为64px也就是32dp】
- title 定义菜单的标题
showAsAction 定义菜单的状态 【主要用在ActionBar上】包含的值为:
- always:这个值会使菜单项一直显示在Action Bar上。
- ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
- never:这个值使菜单项永远都不出现在Action Bar上。
- withText:这个值使菜单项和它的图标,菜单文本一起显示。【withText属性要在横屏时才体现的出来。】
res/menu/act_action_item.xml文件源码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/copy"
android:icon="@drawable/ic_action_copy"
android:showAsAction="ifRoom"
android:title="拷贝"/>
<item
android:id="@+id/cut"
android:icon="@drawable/ic_action_cut"
android:showAsAction="ifRoom"
android:title="剪切"/>
<item
android:id="@+id/discard"
android:icon="@drawable/ic_action_discard"
android:title="删除"/>
<item
android:id="@+id/edit"
android:icon="@drawable/ic_action_edit"
android:title="编辑"/>
<item
android:id="@+id/newObj"
android:icon="@drawable/ic_action_new"
android:title="新建"/>
</menu>
- 回调【public boolean onCreateOptionsMenu(Menu menu)】方法,加入设计的action Item
- 该方法主要构造菜单的方法【这种菜单为选项菜单】
- 该方法的参数Menu就是菜单对象
- 该方法返回true则显示该menu,false 则不显示;
//返回true,才能使得菜单能用,返回false菜单不能用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//构造MenuInflater对象
MenuInflater menuInflater = new MenuInflater(this);
//使用MenuInflater对象的inflate方法获取菜单的xml文件,然后赋值给Menu对象
menuInflater.inflate(R.menu.act_action_item, menu);
//super.onCreateOptionsMenu(menu)会返回true
return super.onCreateOptionsMenu(menu);
}
具备物理按键的手机不会出现overflow button或overflow menu,也就是那三个点。可以添加以下代码强制出现三点
//force to show overflow menu in actionbar for android 4.4 below
private void getOverflowMenu() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class
.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act);
actionBar = this.getSupportActionBar();
actionBar.setTitle("ddddddddddd");
button1 = (Button) this.findViewById(R.id.button1);
button2 = (Button) this.findViewById(R.id.button2);
//调用强制出三点按钮
getOverflowMenu();
}
添加 Action Item 点击事件
回调【public boolean onOptionsItemSelected(MenuItem item)】 方法,添加每个Action Item的点击事件
- 该方法为菜单项被点击时调用,也就是菜单项的监听方法。
- MenuItem参数为每个菜单项对象
- 如果我们希望将菜单项点击的事件传递下去,继续触发其他处理,则返回false,如果我们认为全部已经处理完,到此为止,不需要将事件传递下去,则返回true。如果采用return super.onOptionsItemSelected(item); 则返回值为flase,即系统缺省返回false。【所以这里需要返回false】
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.copy:
//执行copy
break;
case R.id.cut:
//执行cut
break;
case R.id.discard:
//执行discard
break;
case R.id.edit:
//执行edit
break;
case R.id.newObj:
//执行newObj
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
让 Action Item 显示在底部
Action Item也可以显示在底部【最多显示5个Action item】需要在AndroidManifest.xml里面找到注册的Activity节点添加一些属性和一个meta-data
- Activity的属性为:
- android:uiOptions=”splitActionBarWhenNarrow”
- meta-data的属性为:
- android:name=”android.support.UI_OPTIONS”
- android:value=”splitActionBarWhenNarrow”
<activity
android:name="com.hzj.act.Act"
android:theme="@style/Theme.AppCompat.Light"
android:uiOptions="splitActionBarWhenNarrow" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.support.UI_OPTIONS"
android:value="splitActionBarWhenNarrow" />
</activity>
创建Drop-down Navigation
- 创建SpinnerAdapter适配器
//创建SpinnerAdapter适配器
ArrayAdapter<String> arrayAdapter;
- 实现ActionBar.OnNavigationListener接口
public class Act extends ActionBarActivity implements ActionBar.OnNavigationListener
- 在 onCreate()中设置actionBar对象的导航模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
- 在 onCreate()中添加actionBar对象的OnNavigationListener监听器
actionBar.setListNavigationCallbacks(arrayAdapter, this);
完整代码
创建Tabs Navigation
设置ActionBar导航模式
实现ActionBar.TabListener接口
创建 ActionBar.Tab实例
设置 ActionBar.Tab实例的监听器
ActionBar添加ActionBar.Tab实例
让 ActionBar出现顶部导航箭头
- actionBar.setDisplayHomeAsUpEnabled(true);
该导航箭头的作用【不加处理没有任何作用】
可以返回父活动。
需要在AndroidManifest.xml里面注册Activity的时候指明父活动
Activity添加一个属性
- android:parentActivityName=”com.hzj.act.Act2”
Activity添加一个meta-data
- android:name=”android.support.PARENT_ACTIVITY”
- android:value=”com.hzj.act.Act2”
<activity
android:name="com.hzj.act.Act"
android:parentActivityName="com.hzj.act.Act2"
android:theme="@style/Theme.AppCompat.Light"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.hzj.act.Act2" />
</activity>
- 【未完待续】