invalidateOptionsMenu();使原填充的菜單項(xiàng)無(wú)效,當(dāng)用戶再次訪問(wèn)菜單時(shí),再次調(diào)用onCreateOptionsMenu(Menu menu)。如果我們要每次訪問(wèn)都重新對(duì)菜單進(jìn)行處理,使用onPrepareOptionsMenu()來(lái)替代onCreateOptionsMenu()
菜單文件和SearchView:搜索框 的使用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actions,menu);
SearchView searchView = (SearchView) menu.findItem(R.id.app_bar_search).getActionView();
searchView.setOnQueryTextListener(new QueryTextListener());
return true;
}
public class QueryTextListener implements SearchView.OnQueryTextListener{
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(ActionBarUseageActivity.this, "Searching for: " + query + "...", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.isEmpty() ? "" : "Query so far: " + newText;
tvSearchPre.setText(newText);
return true;
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/app_bar_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/ic_search_black_24dp"
android:title="Search"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/app_bar_edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="Edit"
app:showAsAction="always"/>
<item
android:id="@+id/app_bar_sort"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="Sort"
app:showAsAction="ifRoom">
<menu>
<item
android:id="@+id/action_sort_size"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="By Size"/>
<item
android:id="@+id/action_sort_alpha"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:title="Alphabetically"/>
</menu>
</item>
</menu>
另外的用法
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//將搜索框加入ActionBar
MenuItem item = menu.add("Search");
//設(shè)置SearchView的圖標(biāo)
item.setIcon(android.R.drawable.ic_menu_search);
//設(shè)置ActionItem的顯示方式
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
//使用自定義的SearchView以便更好的控制
mSearchView = new MySearchView(getActivity());
//設(shè)置文本改變的監(jiān)聽(tīng)器
mSearchView.setOnQueryTextListener(this);
//設(shè)置可刪除文本的監(jiān)聽(tīng)器
mSearchView.setOnCloseListener(this);
//設(shè)置圖標(biāo)是否顯示在文本的旁邊,還是作為背景
mSearchView.setIconifiedByDefault(true);
//將SearchView作為ActionItem的選項(xiàng)
item.setActionView(mSearchView);
}