【问题标题】:Android options menu not displayingAndroid 选项菜单不显示
【发布时间】:2014-02-08 11:30:06
【问题描述】:

我是 Android 新手,我一直在尝试添加一个简单的添加按钮,如下所述

list_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:id="@+id/menu_insert"
        android:icon="@android:drawable/ic_menu_add"
        android:title="@string/menu_insert"              
    />     
</menu>

MyActivity.java

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.list_menu, menu);

        return true;  
    }

我在 Dummies 系列书中读到 ic_menu_add 已经存在于资源中,我不需要添加它,但是当我运行此代码时它不会显示。我尝试添加同名的自定义图标,但仍然没有按钮。有人可以帮我解决一下吗。

【问题讨论】:

  • 你有没有把这个布局放在 res 文件夹中的 menu 文件夹中
  • 您有没有忘记按手机的菜单按钮来显示您的选项菜单!?
  • 如果您在 Activity 中使用 Toolbar,请不要忘记 setSupportActionBar()

标签: java android xml menu


【解决方案1】:

如果你使用一个片段,那么你在 onCreate() 中需要这个:

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

【讨论】:

    【解决方案2】:

    我正在处理同样的问题..阅读一些查询和文档..希望这可能对您有所帮助。

    这是我的菜单 XML 文件..

    <item
        android:id="@+id/action_send_feedback"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_send_feedback"/>
    
    <item 
        android:id="@+id/action_share_app"
        android:orderInCategory="100"
        android:showAsAction="ifRoom"
        android:title="@string/action_share_app"
        android:icon="@drawable/ic_action_share" />
    
    <item
        android:id="@+id/action_rate_app"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_rate_app"/>
    

    JAVA 代码在这里..

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    

    对于具有选项按钮(在手机底部)的 android 手机,当按钮被按下时,菜单项 showAsAction="never" 会出现。否则它们将正常显示在操作栏选项菜单上。 .

    参考:http://developer.android.com/guide/topics/ui/menus.html#options-menu

    【讨论】:

      【解决方案3】:

      不需要调用super() 方法。尝试为此替换您的onCreateOptionsMenu

      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          MenuInflater inflater = getMenuInflater();
          inflater.inflate(R.menu.list_menu, menu);
          return true;
      }
      

      【讨论】:

      • 你在使用片段吗?检查下面 roel 的答案是否正确,对我有用。
      【解决方案4】:

      对我来说,我必须在活动 xml 中添加以下代码:

       <androidx.appcompat.widget.Toolbar
              android:id="@+id/toolbar"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@color/colorPrimary"
              android:theme="@style/AppTheme"
              app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
              app:title="@string/app_name"
              app:titleMarginStart="24dp"
              app:titleTextColor="@android:color/white" />
      

      然后到activity.java: 上创建

      Toolbar toolbar = findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);
      

          @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          //super.onCreateOptionsMenu(menu);
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.main, menu);
          return true;
      }
      

      片段 onCreate:

       setHasOptionsMenu(true);
      

      【讨论】:

        【解决方案5】:

        如果您将清单中的 TargetSDK 设置为 5,则会显示该图标。

        如果您的目标是较新的 Android SDK(3.0 及更高版本),操作栏将接管菜单,默认情况下不显示图标。

        你可以试试这个:

        How to show icons in ActionBar overflow menu?

        【讨论】:

        • 是的,但我不想在 ActionBar 中显示它,它应该在屏幕底部,请指导一下,谢谢。
        • 我建议首先使用标准 UI。您的第二个最佳选择可能是在您的清单中定位较低的 sdk(如 9),而您最不理想的选择是创建您自己的菜单,其中包含在您的活动布局中的视图,这些视图在按下菜单按钮时可见和不可见(stackoverflow.com/questions/4239880/… ) 最后一个是个坏主意,因为如果设备没有菜单按钮(有些没有),那么你就不走运了。
        【解决方案6】:

        我遇到过这个问题。但就我而言,我在 Framelayout 中添加了工具栏。最重要的是,我添加了一个带有匹配父级的滚动视图。现在 ScrollView 采用了点击控件,而不是工具栏。因此,如果您使用 FrameLayout,您的工具栏应该是最顶部的视图。

        【讨论】:

          【解决方案7】:

          您是否在 xml 文件检查中错过了这些行

          xmlns:tools="http://schemas.android.com/tools"

          tools:context=".MainActivity"

          如果你错过了这是导致显示选项菜单问题的原因

          【讨论】:

            【解决方案8】:

            您好希望下面的代码对您有所帮助:

                <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
                    <item name="colorPrimary">@color/primary</item>
                    <item name="colorPrimaryDark">@color/primaryDark</item>
                </style>
            

            请提及 DarkActionBar 作为您在 Android 清单文件中使用的主题。

            【讨论】:

              【解决方案9】:

              添加

              app:showAsAction="always"
              

              到菜单项。

              【讨论】:

              • 已经有很多答案了,您能否详细说明您的答案与众不同的原因,或者添加更多示例代码?
              • 不推荐!您应该始终使用“ifRoom”
              【解决方案10】:

              如果它没有出现在您的活动中,请确保在活动的 onCreate() 中调用 setSupportActionBar(R.id.my_toolbar)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-04-07
                • 2018-08-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多