首先,对于ActionBar而言,有5种显示方式:
SHOW_AS_ACTION_NEVER
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
SHOW_AS_ACTION_ALWAYS
SHOW_AS_ACTION_IF_ROOM
SHOW_AS_ACTION_WITH_TEXT
下面对以上5种方式一一简要讲解:
SHOW_AS_ACTION_NEVER
先来看看效果
可以看到无论横屏还是竖屏动作项并没有直接显现出来,而是隐藏在省略号中(无论是否有空间)
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
可以看到这种样式和上一种没有区别
SHOW_AS_ACTION_ALWAYS
发现所有的选项都直接被显示出来(always)
SHOW_AS_ACTION_IF_ROOM
发现竖屏时只显示了两个,其余两个被隐藏到省略号中;横屏时四个都显示了出来,说明这种方式动态受到空间的限制
SHOW_AS_ACTION_WITH_TEXT
发现和最开始两种效果没有区别
那么,既然5种里面有3种没有区别,为什么开发者还要定义这么多种样式呢?
其实,是由于在只使用一个样式的时候,所有的菜单项在Android中被默认收到省略号中了。
而使用“|”(按位或)把不同样式分隔,变成组合样式就能看出其不同。
例如:SHOW_AS_ACTION_ALWAYS
|
SHOW_AS_ACTION_WITH_TEXT
可以看到竖屏是按照SHOW_AS_ACTION_ALWAYS
的方式显示,而横屏时由于空间足够,两种显示形式都体现了出来。
更多的组合有兴趣的读者可以自行尝试。
而一件有趣的事情,有的读者可能已经发现了,SHOW_AS_ACTION_NEVER
和SHOW_AS_ACTION_ALWAYS
是两个互斥的样式,放在一起会有什么效果?
下面我就对这种情况进行尝试:
SHOW_AS_ACTION_ALWAYS
|
SHOW_AS_ACTION_NEVER
发现效果和ALWAYS相同。
其实道理是很简单的,查看一下这五个常量的定义:
SHOW_AS_ACTION_NEVER
= 0 = 0000B;
SHOW_AS_ACTION_IF_ROOM
= 1 = 0001B;
SHOW_AS_ACTION_ALWAYS
= 2 = 0010B;
SHOW_AS_ACTION_WITH_TEXT
= 4 = 0100B;
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
= 8 = 1000B;
很简单,任何样式和NEVER或的时候,都会得到那个样式本身,所以其实NEVER样式其实是充当了一个类似或运算中单位元的角色。
而从这些常量中也能看出,为什么按位或运算能达到组合不同样式的目的了。