当前位置: 首页 > 知识库问答 >
问题:

Android操作栏溢出菜单未在纵向模式下显示

丌官晔
2023-03-14

我有一个标准的Android操作栏(我没有使用兼容性库),带有SearchView和一些纯文本菜单项。我希望始终展开SearchView,并在溢出菜单中显示其余项目。到目前为止,我的代码在平板电脑和Nexus 5的横向模式下运行良好,但当手机处于纵向模式时,不会显示溢出菜单。如果我将collapseActionView属性添加到SearchView,溢出菜单将正确显示,但我希望保持搜索小部件完全展开。

以下是“我的选项”菜单的XML:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@+id/menu_search"
          android:icon="@android:drawable/ic_menu_search"
          android:title="@string/search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView" />
    <item android:id="@+id/action_clear_history"
          android:title="@string/action_clear_history"
          android:showAsAction="never"/>
    <item android:id="@+id/action_feedback"
          android:title="@string/action_feedback"
          android:showAsAction="never"/>
    <item android:id="@+id/action_about"
          android:title="@string/action_about"
          android:showAsAction="never"/>
</menu>

这是我的onCreateOptions菜单代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    if (!mNavigationDrawerFragment.isDrawerOpen()) {
        getMenuInflater().inflate(R.menu.options_menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
        restoreActionBar();
        return true;
    }
    return super.onCreateOptionsMenu(menu);
}

以下是按预期工作的横向模式的屏幕截图:

这是纵向模式,缺少溢出菜单:

有人能给我指出正确的方向吗?

共有3个答案

栾钟展
2023-03-14

试试吧

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();
}
法浩壤
2023-03-14

我有类似的问题,有用的SO我发现是这样的:SearchView占用了新ActionBarCompat中的所有空间,因此解决方案是从代码手动添加SearchView,而不是从您的菜单布局。

下面是我在api 19上成功使用的一些代码,这些代码位于支持actionbar的片段中:

public void initSearchView() {
    searchView = new SearchView(getActionBarHelper().getThemedContext());
    searchView.setIconifiedByDefault(false);

    ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
        ActionBar.LayoutParams.MATCH_PARENT,
        ActionBar.LayoutParams.WRAP_CONTENT, Gravity.RIGHT
        | Gravity.CENTER_VERTICAL);
    searchView.setLayoutParams(layoutParams);

   getActionBarHelper().setCustomView(searchView);
   getActionBarHelper().setDisplayShowCustomEnabled(true);

   searchView.setOnQueryTextListener(mOnQueryTextListener);
   searchView.clearFocus();
   searchView.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
}

  protected ActionBar getActionBarHelper() {
    return ((ActivityBase) getActivity()).getSupportActionBar();
  }

我在onCreateView()中调用initSearchView,

蓬威
2023-03-14
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_search"
          android:icon="@android:drawable/ic_menu_search"
          android:title="@string/search"
          android:showAsAction="ifRoom"
          android:actionViewClass="android.widget.SearchView"/>
    <item
          android:id="@+id/menu_item_more"
          android:icon="@drawable/ic_overflow"
          android:showAsAction="always"
          android:title="CLICK FOR MORE OPTIONS">
        <menu>
            <item android:id="@+id/action_clear_history"
                  android:title="@string/action_clear_history"
                  android:showAsAction="never"/>
            <item android:id="@+id/action_feedback"
                  android:title="@string/action_feedback"
                  android:showAsAction="never"/>
            <item android:id="@+id/action_about"
                  android:title="@string/action_about"
                  android:showAsAction="never"/>
        </menu>
    </item>    
</menu>
 类似资料:
  • 我的应用程序有一个自定义的分割动作栏主题(是的,我使用的是AcionBar Sherlock),顶部是深色,底部是浅色。该应用程序设置为在横向模式下检测设备方向并移除拆分激活栏(只显示顶部的操作栏)。在某些活动中,我有一个由三个垂直点指示的溢出菜单。我想在纵向模式下将溢出菜单图标设置为深色可绘制,然后在横向模式下设置为浅色可绘制。是否有方法更改活动类中的溢出菜单图标?

  • 我正在用Sherlock设置一个带有3个项目/图标的动作栏。在ICS模拟器上运行时,我只能看到2个图标。而且:没有溢出菜单(那些3点图标)!我只会在按下手机的功能表按钮时看到第三个图标。 我是否必须强制溢出图标,如果是,我如何才能这样做?

  • 我的问题是一个热门问题,我阅读并尝试了很多相关帖子,但我没有实现预期的结果,显示菜单。我还没有找到正确的解决方案。 我的应用程序可以在Android 4 . 2 . 2版本上完美运行。(版本代码17)我在Galaxy Duos手机上试用过。 我使用Android版本7,0(版本代码24)我尝试了更多目标SDK版本的变体,具有8,19,24,25并且没有目标SDK规范。 以下是一些相关的部分 -盖德

  • 你好 由于某些原因,该图标从未显示在操作栏上,我使用了ifRoom |与text的组合,但仍然没有显示。我也尝试过在风景中旋转。我正在使用genymotion 4.4.2 我正在膨胀菜单中的一个片段: 我在纵向和横向模式下尝试了硬件nexus5,但没有图标。 我也尝试过使用以下方法,但也不起作用: 非常感谢任何建议,

  • 我有旧式菜单应用程序。在改变主题到全息和切换目标SDK版本到14后,软菜单按钮消失了(这是好的),但使用菜单按钮在操作栏显示文本菜单大部分离屏幕,你可以看到在附上的图像。你有什么办法解决这个问题吗? 我已经解决了。清单参数中有问题: 在改变了任何否认为真之后,这个问题就消失了。

  • 我需要的是,如果平板电脑没有菜单硬件按钮…它将在软件按钮上显示菜单按钮,如您所见: 所以我谷歌了一下,发现要显示这个按钮,你只需要: 将minSdkVersion设置为10或更低,将targetSdkVersion设置为11、12或13,并且您不使用ActionBar,则在运行Android 4.0或更高版本的手机上运行您的应用时,系统将添加传统溢出按钮 “将您的android: TaretSdk