最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】继续尝试给Android程序的右上角的ActionBar中添加三个点的选项按钮

Android crifan 9078浏览 0评论

【背景】

想要给Android中的ActionBar中添加那种三个点的选项菜单,之前已经折腾过了,但是失败了,以为新版Android中没法添加呢:

【已解决】android中actionbar中增加setting菜单

但是后来在别的4.1.2的Android手机中,也还是看到了这种的三个点的按钮:

比如微信中就能看到:

4.1.2 android weixin micromsg also show three dot settings menu

墨迹天气中也有:

4.1.2 android moji again show three dot settings menu

 

后来,在折腾:

【未解决】Android中添加支持多种语言切换

期间,也还是需要先要弄出来三个点的配置菜单,才方便继续添加支持语音切换的功能。

所以此处还是要继续去想办法,把那三个点的配置菜单弄出来才行。

【折腾过程】

1.搜:

android three dot option menu

参考:

Android ActionBar three dot icon not showing up – Stack Overflow

->

官网:

Menus | Android Developers

以及:

android – How to disable/hide three-dot indicator(Option menu indicator) on ICS handsets – Stack Overflow

去看看那个onPrepareOptionsMenu以及试试效果,但是看了官网解释,这个貌似不是我所需要关心的。

2.所以还是参考官网

Menus | Android Developers

去一点点折腾试试吧。

3.看了官网的解释:

<item>
Creates a MenuItem, which represents a single item in a menu. This element may contain a nested <menu> element in order to create a submenu.

想到了:

此处应该可以给Setting加子菜单,这样就可以:

即使没有弄出来三个点的菜单按钮,但是也可以使用现在的Setting按钮代替三个点,然后点击Setting后,出现对应的所需要配置选项子菜单了。

但是先不这么弄。等实在搞不定了三个点的菜单,再用这个办法。

4.关于menu的各种参数详细含义,可以去官网:

Menu Resource | Android Developers

中找到。

其中看到那个

android:showAsAction

的值的其中一种可能是:collapseActionView

看着有点可疑,所以去查查看。

5.参考:

Bricks Fighter

貌似感觉是:

对于加入的N个menu,如果是有空间能放得下,则就显示,否则才可能被放到三个点里面的。

这里:

ActionBar collapseActionView shows as ContextMenu instead of PopupMenu · Issue #655 · Prototik/HoloEverywhere · GitHub

好像是可以点击这样的collapseActionView之后,再弹出子菜单的。

6.看了“Creating an Options Menu”部分的解释后,基本明白其中的逻辑了:

对于那三个点菜单的话,标准叫法叫做:action overflow button

但是是只在Android 3.0 (API level 11) +才会出现的

低版本的(Android 2.3.x (API level 10) or lower)对应的叫做:overflow menu,效果(不是三个点)而是More那个按钮

不论是三个点还是More按钮,作用都很明显,都表示点击后可以看到更多的按钮菜单

这些更多的菜单,都是由于之前低版本的6个Menu界面放不下了,或者是新版本的actionBar中没位置显示了,才放到这个overflow menu/button中的。

而是否放到overflow中,是通过对应的android:showAsAction参数来决定的。

对于:

android:showAsAction="ifRoom"

说的就是:

如果actionbar中放不下,就放到overflow中去。

所以,现在去试试其他一些选项的效果:

7.把:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_discard"
        android:icon="@drawable/error_white"
        android:orderInCategory="1"
        android:showAsAction="ifRoom|withText"
        android:title="@string/discard"/>
    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/forward_white"
        android:orderInCategory="2"
        android:showAsAction="ifRoom|withText"
        android:title="@string/send"/>

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="ifRoom|withText"
        android:title="@string/settings"/>
    
</menu>

改为:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_discard"
        android:icon="@drawable/error_white"
        android:orderInCategory="1"
        android:showAsAction="ifRoom|withText"
        android:title="@string/discard"/>
    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/forward_white"
        android:orderInCategory="2"
        android:showAsAction="ifRoom|withText"
        android:title="@string/send"/>

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="withText"
        android:title="@string/settings"/>
    
</menu>

效果是:

结果setting菜单不显示了。。。。

android actionbar setting menu not show

8.再试试:

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:title="@string/settings"/>

结果:

也还是不显示。

9.试试:

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="collapseActionView"
        android:title="@string/settings"/>

结果:

也不显示。。。

10.参考:

Action Bar | Android Developers

去学习ActionBar,

对应的3.0+的,应该去看:

ActionBar | Android Developers – API

但是该页面内,竟然没有搜到和overflow有关的内容。。。

11.不过:

Action Bar | Android Developers

中是有overflow相关内容的。

感觉此处之所以不显示三个点的那个菜单,是因为:

当前测试是用的PAD->屏幕很大->ActionBar中空间足够足够显示所有的按钮的->所以没有多余的,放不下的菜单->所以不显示三个点

所以去试试:

换个android的手机->屏幕不够大->ActionBar中不能一次性显示所有的菜单->希望可以看到那个三个点的菜单

结果:

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="collapseActionView"
        android:title="@string/settings"/>

也是不显示。

然后:

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="ifRoom|withText"
        android:title="@string/settings"/>

效果是:

竟然也不显示了。。。

去看看代码,到底咋回事。。。

12.然后确认

android:showAsAction="ifRoom|withText"

在PAD上,的确是可以显示的。

所以再去试试:

android:showAsAction="ifRoom"

在手机上是否能显示:

结果还不能显示。

再去试试,把text都去掉:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_discard"
        android:icon="@drawable/error_white"
        android:orderInCategory="1"
        android:showAsAction="ifRoom"
        android:title="@string/discard"/>
    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/forward_white"
        android:orderInCategory="2"
        android:showAsAction="ifRoom"
        android:title="@string/send"/>

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="ifRoom"
        android:title="@string/settings"/>
</menu>

然后是:

在手机上也还是不显示settings。。。

 

13.也是折腾了半天,最后才有点搞懂具体的逻辑的:

先说现象:

(1)对于三星GT-I9100G:

  • Android 4.1.2
  • 4.3寸屏
  • 有物理MENU键

的手机来说:

屏幕不够大->ActionBar显示空间不是太多->貌似只能显示两个menu->

所以对于此处的代码中,有三个按钮:menu_discard,menu_send,menu_settings

来说,menu_settings始终都是不能直接显示在ActionBar上面

而不论上面的配置参数是否有是ifRoom,是否是ifRoom|withText,

结果都是:

第三个按键,是否都显示不出来,只能靠按物理MENU键,才能看到第三个菜单:

for android 4.1.2 gt-i9100g press phsical menu then show more menu

反过来说:

如果你不按MENU键,是始终看不到第三个菜单的

->一直也看不到(三个点的)overflow菜单的

 

(2)而对于三星GT-P5210的PAD

  • Android 4.2.2
  • 也有物理MENU菜单
  • 10.1寸屏

只显示图标不显示文字:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_discard"
        android:icon="@drawable/error_white"
        android:orderInCategory="1"
        android:showAsAction="ifRoom"
        android:title="@string/discard"/>
    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/forward_white"
        android:orderInCategory="2"
        android:showAsAction="ifRoom"
        android:title="@string/send"/>

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="ifRoom"
        android:title="@string/settings"/>
</menu>

的效果:

actionbar show three menu only icon

 

不仅显示图标也显示文字:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_discard"
        android:icon="@drawable/error_white"
        android:orderInCategory="1"
        android:showAsAction="ifRoom|withText"
        android:title="@string/discard"/>
    <item
        android:id="@+id/menu_send"
        android:icon="@drawable/forward_white"
        android:orderInCategory="2"
        android:showAsAction="ifRoom|withText"
        android:title="@string/send"/>

    <item
        android:id="@+id/menu_settings"
        android:icon="@drawable/settings"
        android:orderInCategory="3"
        android:showAsAction="ifRoom|withText"
        android:title="@string/settings"/>
</menu>

的效果:

actionbar show three memu title and text

 

也是看不到三个点的overflow菜单的。

 

【总结】

后续折腾,以及总结,详见:

【已解决】Android中ActionBar中不显示overflow(就是三个点的那个按钮)

转载请注明:在路上 » 【记录】继续尝试给Android程序的右上角的ActionBar中添加三个点的选项按钮

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (5)

  1. 屁话真多 看不懂
    1119年前 (2015-11-06)回复
  2. 请问一下,如果settings.apk里面,“应用设置”里面的右上角三个点菜单里面,有一个“USB安装应用”选项被隐藏掉了,我应该检查哪里的代码才能把这个选项打开呢?
    keymanlu9年前 (2015-07-29)回复
    • 不好意思,没研究过,不清楚啊。
      crifan9年前 (2015-07-29)回复
      • 没关系,我再找找,谢谢你
        keymanlu9年前 (2015-07-30)回复
  3. 我的为什么显示不了图标,
    竹林10年前 (2014-12-02)回复
90 queries in 0.197 seconds, using 22.13MB memory