【发布时间】:2014-12-22 15:02:02
【问题描述】:
我正忙于将现有应用更改为 Material Design,但我在操作栏内的菜单项方面遇到了问题。
首先,在某些活动中,我使用的是 searchview,但我已经读到您需要在 searchview 菜单 xml 中使用自定义前缀。所以我做到了:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search_light"
android:title="Search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView"/>
</menu>
但每次我收到错误时: "不使用 appcompat 库时应使用 android:showAsAction"
如果我将 app:showAsAction="ifRoom|collapseAction" 更改为 android:showAsAction="ifRoom|collapseActionView"
我没有得到一个占据整个操作栏长度的搜索视图,只是在放置项目的右上角有一些奇怪的正方形。这是我的 onCreateOptionsMenu 代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.searchview, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView search = (SearchView) MenuItemCompat.getActionView(searchItem);
if(search != null)
{
search.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(search.getWindowToken(), 0);
try {
new LoadResultsTask().execute(URLEncoder.encode(query, "UTF-8"));
} catch (UnsupportedEncodingException e) {
Toast.makeText(IndexerOverviewActivity.this, "Could not parse Query", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
return true;
}
@Override
public boolean onQueryTextChange(String search) {
return true;
}
});
}
search.setIconifiedByDefault(false);
return super.onCreateOptionsMenu(menu);
}
我还注意到,当我在我的设备上启动我的应用程序时,我所有具有android:showsAsAction="always" 的操作栏菜单项都显示为android:showsAsAction="never"。所以我的第一个猜测是它与菜单 xml 文件中使用的前缀有关。
【问题讨论】:
标签: android android-support-library android-appcompat android-menu