首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android操作栏溢出菜单未在纵向模式下显示

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

Stack Overflow用户
提问于 2013-12-28 20:55:09
回答 3查看 1.4K关注 0票数 2

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

下面是菜单:

代码语言:javascript
复制
<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>

这是我的onCreateOptionsMenu代码:

代码语言:javascript
复制
@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);
}

下面是景观模式的屏幕截图,按预期工作:

​

​

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

​

​

谁能给我指明正确的方向?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-01 03:26:06

代码语言:javascript
复制
<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>

我添加了一个item,它包含一个对溢出子菜单的引用,如果需要的话,您可以尝试这样做,或者可以询问对它的怀疑。ic_overflow图标可能是

​

票数 1
EN

Stack Overflow用户

发布于 2014-08-29 23:46:57

我也有类似的问题,所以我发现了这样的问题:SearchView taking all the space in the new ActionBarCompat,所以解决方案是从代码中手动添加SearchView,而不是从菜单布局中添加。

下面是我在api 19上使用的一些代码,它们都是支持actionbar的片段:

代码语言:javascript
复制
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();
  }

我在initSearchView中调用onCreateView(),

票数 0
EN

Stack Overflow用户

发布于 2013-12-28 21:00:05

试一试

代码语言:javascript
复制
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();
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20819289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档