平台: Intellij IDEA 14 && LinuxMint 17.1
安卓官网上的ActionBar教程是针对Android3.0版本而写的,使用的是v7库来实现,考虑到Android3.0也是N年前的系统了,所以我的学习肯定不会以它为主,在网上找了好多资料,终于摸着了一点门道.
其中,[1]是ActionBar的图标,[2]是两个action按钮,[3]是overflow按钮
1. 静态添加AnctionBar 的Item
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.tcstory.actionbartesting.app">
<application android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
android:theme=”@style/AppTheme”这个是生成项目的时候IDE帮我们选择的,它的值如下所示
res/values/styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
res/menu/menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/action_compose"
android:showAsAction="ifRoom"
android:title="写作"/>
<item android:id="@+id/action_save"
android:showAsAction="ifRoom"
android:title="保存"/>
<item android:id="@+id/action_setting"
android:showAsAction="never"
android:title="设置"/>
</menu>
最后,我们需要在主活动中重载默认的onCreateOptionsMenu(Menu)方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
2. 动态添加AnctionBar 的Item
先要在AndroidManifest.xml中设置好主题,然后在主活动中设置
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem compose = menu.add(Menu.NONE, 0, Menu.NONE, "写作");
MenuItem save = menu.add(Menu.NONE, 1, Menu.NONE, "保存");
MenuItem setting = menu.add(Menu.NONE, 2, Menu.NONE, "设置");
compose.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
save.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
setting.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
return super.onCreateOptionsMenu(menu);
}
取消ActionBar的两种方法
- 在AndroidManifest.xml中设置
android:theme="@android:style/Theme.Holo.Light.NoActionBar
- 在主活动中设置
先获取android.app.ActionBar的实例,然后调用它的hide()方法
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getActionBar(); actionBar.hide(); }
- 在AndroidManifest.xml中设置
showAsAction的值
决定在ActionBar中的Menu Item何时以及以什么方式显示,
并且只有当Menu Item在ActionBar中的时候,才能以Action Item 的形式显示可选的值如下
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
- always: 总是显示Item,不过可能会让它和ActionBar中的其他UI重叠
- ifRoom: 只有当有足够空间的时候才放置在ActionBar中,不然会被收进overflow里面
- never: 直接放入overflow里面
- withText: 当你同时给一个Item指定一个图标(icon)和标题(title)的时候,默认情况下,只会显示图标,你可以使用这个选项让拥有图标的Item也显示标题.它还可以配合其他选项一起使用,例如
<item yourapp:showAsAction="ifRoom|withText" ... />
- collapseActionView: 与Item相关联的action view可以被折叠起来.
上面这几个选择按顺序对应MenuItem中的如下几个常量:
- public static final int SHOW_AS_ACTION_ALWAYS
- public static final int SHOW_AS_ACTION_IF_ROOM
- public static final int SHOW_AS_ACTION_NEVER
- public static final int SHOW_AS_ACTION_WITH_TEXT
- public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW