1. 添加ActionBar
Action Bar包括在所有Activity中使用的Theme.Holo主题, Android 3.0或更高版本上时,系统为每个Activity应用默认使用Theme.Holo主题
2. 不适用ActionBar
3. 如果你的应用程序里会频繁的显示和隐藏ActionBar时, 建议将Activity主题中将android:windowActionBarOverlay属性值设置为true,不然show ActionBar或者hide ActionBar的时候Activity会重新调整布局、
4. 如果把android:windowActionBar样式属性设置为false,那么getActionBar()方法将返回null
5. 添加Action item
可以把menu item作为Action item
先看看默认menu的显示
例子,显示效果是menu作为ActionBar的action overflow显示(一个三个竖点的按钮,点击会弹出菜单):
AndroidManifest.xml
src/com/wind/actionbar/HelloActionBarActivity.java
res/menu/menu.xml
想把menu item转化为action item,只需要修改/res/menu/menu.xml,顺便排个序:android:orderInCategory的值越小,排序越靠前
/res/menu/menu.xml
6. 响应action item的点击事件
src/com/wind/actionbar/HelloActionBarActivity.java
8. 使用应用程序图标来导航
然后在它的选中事件里实现想要实现的功能
9. 隐藏ActionBar的app图标和Title
10. 使用应用程序向上导航
例子:src/com/wind/actionbar/B_Activity.java
Action Bar包括在所有Activity中使用的Theme.Holo主题, Android 3.0或更高版本上时,系统为每个Activity应用默认使用Theme.Holo主题
2. 不适用ActionBar
方法1.
<activity android:theme="@android:style/Theme.Holo.NoActionBar">
方法2.
ActionBar actionBar = getActionBar();
actionBar.hide();
3. 如果你的应用程序里会频繁的显示和隐藏ActionBar时, 建议将Activity主题中将android:windowActionBarOverlay属性值设置为true,不然show ActionBar或者hide ActionBar的时候Activity会重新调整布局、
4. 如果把android:windowActionBar样式属性设置为false,那么getActionBar()方法将返回null
5. 添加Action item
可以把menu item作为Action item
先看看默认menu的显示
例子,显示效果是menu作为ActionBar的action overflow显示(一个三个竖点的按钮,点击会弹出菜单):
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wind.actionbar"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="com.wind.actionbar.HelloActionBarActivity"
android:label="@string/app_name">
<!-- android:uiOptions="splitActionBarWhenNarrow" will display below -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
src/com/wind/actionbar/HelloActionBarActivity.java
package com.wind.actionbar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
public class HelloActionBarActivity extends Activity {
private static final String TAG = "HelloActionBarActivity";
//private ActionBar actionBar;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
}
res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item1"
android:title="111"
android:icon="@drawable/ic_launcher">
</item>
<item android:id="@+id/item2"
android:title="222"
android:icon="@drawable/ic_launcher">
</item>
<item android:id="@+id/item3"
android:title="333"
android:icon="@drawable/ic_launcher">
</item>
<item android:id="@+id/item4"
android:title="444"
android:icon="@drawable/ic_launcher">
</item>
</menu>
想把menu item转化为action item,只需要修改/res/menu/menu.xml,顺便排个序:android:orderInCategory的值越小,排序越靠前
/res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item1"
android:title="111"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:orderInCategory="1">
</item>
<item android:id="@+id/item2"
android:title="222"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:orderInCategory="2">
</item>
<item android:id="@+id/item3"
android:title="333"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:orderInCategory="3">
</item>
<item android:id="@+id/item4"
android:title="444"
android:icon="@drawable/ic_launcher"
android:showAsAction="ifRoom|withText"
android:orderInCategory="0">
</item>
</menu>
6. 响应action item的点击事件
src/com/wind/actionbar/HelloActionBarActivity.java
package com.wind.actionbar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
public class HelloActionBarActivity extends Activity {
private static final String TAG = "HelloActionBarActivity";
//private ActionBar actionBar;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v(TAG, "onCreate");
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) { //响应menu item或者action item的点击
Log.v(TAG, "onOptionsItemSelected");
switch(item.getItemId()){
case R.id.item1:
Log.v(TAG, "item1 pressed");
break;
case R.id.item2:
Log.v(TAG, "item2 pressed");
break;
default:
Log.v(TAG, "default");
}
return super.onOptionsItemSelected(item);
}
}
7. Android4.0之后增加了分割actionbar的属性:
android:uiOptions="splitActionBarWhenNarrow
在application或者Activity里添加这个属性,则会使Action item显示在屏幕的底部
8. 使用应用程序图标来导航
如果你要使用应用图标来导航,要注意从Android4.0(API 级别 14)开始,必须通过调用setHomeButtonEnabled(true)方法来激活
ActionBar actionBar = this.getActionBar();
actionBar.setHomeButtonEnabled(true);
然后在它的选中事件里实现想要实现的功能
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// 在action bar点击app icon;
//TODO click event implement
return true;
...
}
}
9. 隐藏ActionBar的app图标和Title
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayShowHomeEnabled(false); //不显示app图标
actionBar.setDisplayShowTitleEnabled(false); //不显示Title
等价于:
ActionBar actionBar = this.getActionBar();
actionBar.setDisplayOptions(0,ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_SHOW_TITLE );
10. 使用应用程序向上导航
ActionBar actionBar = this.getActionBar();
actionBar.SetDisplayHomeAsUpEnabledtrue(true); //来激活应用程序向上导航功能
例子:src/com/wind/actionbar/B_Activity.java
package com.wind.actionbar;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
public class B_Activity extends Activity{
private static final String TAG = "B_Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.title);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true); //激活应用程序向上导航
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.v(TAG, "onOptionsItemSelected");
switch (item.getItemId()) {
case android.R.id.home:
Log.v(TAG, "app icon is pressed");
finish();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}