【问题标题】:Remove Title from Contextual Action Bar从上下文操作栏中删除标题
【发布时间】:2017-01-18 02:41:12
【问题描述】:

我想删除为上下文操作栏中的标题分配的视图。

请注意,我不想设置标题;我希望View 完全消失。这是为了留出更多空间,以便操作可以显示在菜单栏上,而不是被拖放到溢出菜单中。

还要注意我不想设置android:showAsAction="always"。我希望 Android 决定图标有多少空间。我只是希望通过删除为标题保留的空白区域来获得更多空间

更新

我尝试过的事情:

  • ActionMode.setCustomView(null)
  • ActionMode.setTitleOptionalHint(true)
  • ActionMode.setTitle("")

很遗憾,这些都不起作用。


更新 2

事实证明,我想要的结果不可能以我尝试的方式实现。删除标题不会为更多图标留出空间; Android 根据设备屏幕大小设置硬限制。如果您想在菜单中添加更多图标,请参阅@adneal 提供的答案。

如果您确实有一个标题(如下所示)并且想要删除它,那么您可以致电ActionMode.setTitle(""),正如@CommonsWare 在接受的答案中提供的那样。

【问题讨论】:

    标签: android contextual-action-bar android-actionmode


    【解决方案1】:

    还要注意我不想设置 android:showAsAction="always"

    如果您想在ActionBar 中使用两个以上的操作按钮,则必须这样做,至少在较小的屏幕上是这样。 ActionBarPolicy 决定在ActionBardefault amount is 2. 中放置多少个操作按钮

    覆盖该默认值的唯一方法是让您的MenuItem“始终”出现。

        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.setTitle(null);
    
            for (int i = 0; i < 5; i++) {
                menu.add("Item " + (i + 1)).setIcon(android.R.drawable.sym_def_app_icon)
                        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
            }
            return true;
        }
    

    结果

    【讨论】:

    • 虽然这确实有帮助,但它不能回答“如何删除包含标题的View?”的问题。我开始认为它实际上可能不存在。但是,正如您所指出的,Android 基本上说,“我不在乎是否有空间;您只有两个图标。处理它。”
    • 将您的菜单项设置为“始终”显示,然后使用@CommonsWare 提供的答案。我没有提到如何删除标题,因为他已经提供了几乎所有可能的解决方案。
    • 这绝对有效;如您的屏幕截图所示,任何具有android:showAsAction="always" 属性的图标都被强制进入菜单。我希望删除标题视图可以在不这样做的情况下腾出更多空间。不幸的是,情况似乎并非如此。
    • 我希望删除标题视图可以腾出更多空间
    【解决方案2】:

    尝试在ActionMode 上拨打setCustomView(null)

    如果这不起作用,请在ActionMode 上尝试setTitleOptionalHint(true)

    如果这不起作用,请在ActionMode 上尝试setTitle("")

    【讨论】:

    • 我在onPrepareActionMode 中调用inflater.inflate(R.menu.my_menu, menu); 后尝试调用这些。那是尝试这些的合适地方吗?
    • 这意味着我将这些行添加到我的代码中并运行了应用程序,但问题仍然存在。
    • @DirtyBeach: onPrepareActionMode() 似乎是正确的位置。很抱歉,这些都不起作用。
    • 根据@adneal 制作的cmets,这似乎是删除标题的正确方法。不幸的是,由于图标限制,它没有产生预期的结果。因此,这是正确的答案。
    【解决方案3】:

    根据 adneal 的回答,我遇到了如何处理该操作的问题。 所以我发现这个解决方案更简单: 仍在使用xml/inflater 但添加

     menu.findItem(R.id.whatever).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    

    【讨论】:

      【解决方案4】:
      @Ovrride
      protected void onCreate(Bundle savedInstanceState……
      
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
      
      setContentView(R.layout.prva.xml);
      

      【讨论】:

      • 这适用于Activity 中的操作栏。我在询问ActionMode 中的上下文操作栏。它们是不同的东西。
      【解决方案5】:

      我尝试了这里提供的解决方案并做了一些观察:

      • 标题的视图始终包含在视图层次结构中(-> Android Studio 的 Layout Inspector)但它位于后台,将被内容覆盖。
      • setContentView 将提供的视图添加到layuot(在前台)。所以setContentView(null) 不会删除标题的视图。 (在布局检查器中仍然可见)
      • app:showAsAction="always" 在扩展布局时被覆盖。您可以设置始终显示 3 项,但只会显示 2 项。

      但在扩展菜单后以编程方式设置.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS) 有效。

      【讨论】: