ActionBar的使用

首先是更改Overflow图标

通过android:actionOverflowButtonStyle更改

1
2
3
4
5
6
7
8
9
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- 替换Overflow的图标-->
<item name="android:actionOverflowButtonStyle">@style/ChatActionOverflowButtonStyle</item>
</style>
<style name="ChatActionOverflowButtonStyle">
<item name="android:src">@mipmap/actionbar_add_icon</item>
</style>

Overflow会根据手机出现不显示的情况,所以需要通过反射让它一直显示出来。

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 显示Overflow
*/
private void setOverflowShowingAlways() {
try {
ViewConfiguration configuration = ViewConfiguration.get(this);
Field menuKey = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKey.setAccessible(true);
menuKey.setBoolean(configuration, false);
} catch (Exception e) {
e.printStackTrace();
}
}

如果需要在Overflow的子项里面显示图标,也是需要使用反射的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 显示Overflow里面子项的图标
*
* @param featureId
* @param menu
* @return
*/
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}

设置Overflow的子项

http://ww2.sinaimg.cn/large/bf974773gw1eqgz95nvr8j20qr0j0goc.jpg