我有一个标准的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>
这是我的onCreateOptionsMenu
代码:
@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);
}
以下是横向模式的屏幕截图,按预期工作:
这是肖像模式,缺少溢出菜单:
有人能指出我正确的方向吗?
答案 0 :(得分:1)
<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 :(得分:0)
我有类似的问题,很有用我发现这是:SearchView taking all the space in the new ActionBarCompat,因此解决方案是从代码中手动添加SearchView,而不是从菜单布局中添加。
这里有一些我在api 19上成功使用的代码,带有支持操作栏的片段:
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,
答案 2 :(得分:-1)
试
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();
}