即使手机有硬件菜单按钮,如何始终显示溢出菜单(ActionBar)?

Posted

技术标签:

【中文标题】即使手机有硬件菜单按钮,如何始终显示溢出菜单(ActionBar)?【英文标题】:How to always show overflow menu (ActionBar) even if phone has hardware menu button? 【发布时间】:2014-05-01 14:52:36 【问题描述】:

以下是实现的代码。请建议我如何在操作栏中创建“溢出菜单”选项,即使手机有硬件菜单按钮?

这是我当前的代码:

MainActivity.java

public boolean onCreateOptionsMenu(Menu menu) 
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main_actions, menu);
    return super.onCreateOptionsMenu(menu);

activity_main_actions.xml

<?xml version="1.0" encoding ="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<!-- Search  -->
<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="ifRoom"/>

<!-- Email -->
<item android:id="@+id/action_email"
      android:icon="@drawable/ic_action_email"
      android:title="@string/action_email"
      android:showAsAction="never"/>

<!-- Help -->
<item android:id="@+id/action_help"
      android:icon="@drawable/ic_action_help"
      android:title="@string/action_help"
      android:showAsAction="never"/>

<!-- attach -->
<item android:id="@+id/action_attach"
      android:icon="@drawable/ic_action_attachment"
      android:title="@string/action_attach"
      android:showAsAction="never" />

【问题讨论】:

尝试 android:showAsAction="never" 作为 action_search 项目.. 【参考方案1】:

最后我还是用下面的代码得到了答案,它是在方法onCreateOptionMenu()之后编码的...

import android.view.ViewConfiguration;

        private void getOverflowMenu()

         try 
            ViewConfiguration config = ViewConfiguration.get(this);
            Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
            if(menuKeyField != null) 
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            
         catch (Exception e) 
            e.printStackTrace();
        
    

【讨论】:

最初没有显示溢出菜单!它显示屏幕是否旋转或菜单是否被按下。但是如何在应用启动时显示它? 我应该在哪里调用这个方法?【参考方案2】:

试试这个:

由于您将 showAsAction 属性设置为 never,因此这些菜单项将永远不会显示为操作视图。试试这个:

<item android:id="@+id/action_search"
      android:icon="@drawable/ic_action_search"
      android:title="@string/action_search"
      android:showAsAction="ifRoom|withText"/>

<!-- Email -->
<item android:id="@+id/action_email"
      android:icon="@drawable/ic_action_email"
      android:title="@string/action_email"
      android:showAsAction="ifRoom|withText"/>

<!-- Help -->
<item android:id="@+id/action_help"
      android:icon="@drawable/ic_action_help"
      android:title="@string/action_help"
      android:showAsAction="ifRoom|withText"/>

<!-- attach -->
<item android:id="@+id/action_attach"
      android:icon="@drawable/ic_action_attachment"
      android:title="@string/action_attach"
      android:showAsAction="ifRoom|withText"/>

【讨论】:

错误答案。他不想在 ActionBar 中显示动作。即使手机有菜单按钮,他也想显示溢出菜单。 (这不是默认行为)

以上是关于即使手机有硬件菜单按钮,如何始终显示溢出菜单(ActionBar)?的主要内容,如果未能解决你的问题,请参考以下文章

java 更改硬件菜单按钮的行为,以显示/隐藏工具栏溢出菜单 - 来自http://stackoverflow.com/qu

Bootstrap 4:无论屏幕大小,始终显示移动菜单按钮

WordPress - 将按钮添加到标题区域

Jquery下拉菜单单击始终打开

如何在 Chrome 中制作溢出菜单?

如何隐藏 Qt 小部件应用程序菜单栏?