這個demo示範了actionbar的基本用法:定義menu的布局檔案,向actionbar中添加菜單,設定菜單功能。
actions.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_search"
android:actionViewClass="android.widget.SearchView"
android:icon="@android:drawable/ic_menu_search"
android:showAsAction="always"
android:title="Search"/>
<item
android:id="@+id/action_add"
android:icon="@android:drawable/ic_menu_add"
android:title="Add"/>
<item
android:id="@+id/action_edit"
android:icon="@android:drawable/ic_menu_edit"
android:showAsAction="ifRoom"
android:title="Edit"/>
<item
android:id="@+id/action_share"
android:icon="@android:drawable/ic_menu_share"
android:showAsAction="ifRoom"
android:title="Share"/>
<item
android:id="@+id/action_sort"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:showAsAction="ifRoom"
android:title="Sort">
<menu>
<item
android:id="@+id/action_sort_size"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:onClick="onSort"
android:title="By size"/>
<item
android:id="@+id/action_sort_alpha"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:onClick="onSort"
android:title="By alphabetically"/>
</menu>
</item>
</menu>
MainActivity
public class MainActivity extends Activity implements OnQueryTextListener {
//用于顯示搜尋的内容
private TextView mSearchText;
//用于記錄排序模式的條目
private int mSortMode=-;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
mSearchText=new TextView(this);
setContentView(mSearchText);
//一直顯示更多選項
//setOverflowShowingAlways();
}
/**
* 利用反射的方法,讓“更多”選項一直顯示
*/
private void setOverflowShowingAlways() {
try {
ViewConfiguration configuration = ViewConfiguration.get(this);
Field field = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
field.setAccessible(true);
field.setBoolean(configuration, false);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//得到菜單視圖
getMenuInflater().inflate(R.menu.actions, menu);
//擷取搜尋菜單的視圖
SearchView searchView=(SearchView) menu.findItem(R.id.action_search).getActionView();
//設定搜尋内容監聽
searchView.setOnQueryTextListener(this);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(mSortMode!=-){
//将mSortMode記錄的條目的圖示取出
Drawable icon=menu.findItem(mSortMode).getIcon();
/*将sort條目的圖示設定為剛取出的圖示
需要注意的是由于sort條目設定了android:showAsAction="ifRoom"屬性
當sort不在actionbar的首界面上顯示時,由于在overflow中隻有标題而沒有icon
是以,你不會看到icon圖示的變化。你可以嘗試将ifRoom的值改為always,讓其顯示在actionbar
的首界面上你就會看到程式的效果了*/
menu.findItem(R.id.action_sort).setIcon(icon);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, "Select Item:"+item.getTitle(), ).show();
return super.onOptionsItemSelected(item);
}
/*
* 當送出查詢内容時調用此方法
*/
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(this, "Searching for:"+query+"...", ).show();
return true;
}
/*
* 當搜尋内容發生變化時調用此方法
*/
@Override
public boolean onQueryTextChange(String newText) {
newText=newText.isEmpty() ? "":"Query so far:"+newText;
mSearchText.setText(newText);
return true;
}
public void onSort(MenuItem item){
mSortMode=item.getItemId();
invalidateOptionsMenu();
}
}