在ActionBar/ Toolbar 中添加overflow menu 有几种不同的方法,比如通过反射,设置style等。今天要说的是通过修改style.xml来显示overflow的方法。
1、首先,需要在values/style.xml中添加overflow的相关属性,如下:
<style name="Overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
<item name="android:src">@drawable/ic_menu_moreoverflow_normal_holo_dark</item>
</style>
这里的overflow icon可以自己去Android SDK中找,在platforms/android-xx/data/res/drawable-xxx 下,有很多Google官方的icon。这样就相当于给overflow设置一个图标。
2、在项目目录下面的res文件夹下,找到menu(没有的话新建一个),添加一个xml文件main,这个main.xml设置的就是overflow中的item,即点击之后要显示的内容。如下:
<item
android:id="@+id/resetLocation"
android:title="item1"
android:orderInCategory="100"
android:showAsAction="never"
/>
这里orderInCategory设置的是item的优先级,值越大优先级越低,设置100会让其在overflow menu中显示。
showAsAction属性的意思是item的显示方式,具体的值在这里也说明一下:
- ifRoom
会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于4个,依据屏幕的宽窄而定 - never
永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好把标题都带上。 - always
无论是否溢出,总会显示。 - withText
withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可能显示不全。 - collapseActionView
声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是不可见的。一般要配合ifRoom一起使用才会有效果。
3、定义好main.xml 之后,需要在MainActivity中重写onOptionMenu方法,如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
4、最后为overflow menu中的item添加监听,重写MainActivity中的onOptionsItemSelected方法:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.resetLocation: Toast.makeText(context,"item1",Toast.LENG_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}