Android Api Demos登顶之路(二十七)Action Bar Usage

来源:互联网 发布:欧文总决赛数据统计 编辑:程序博客网 时间:2024/06/03 19:17

这个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=-1;    @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!=-1){            //将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(), 1).show();        return super.onOptionsItemSelected(item);    }    /*     * 当提交查询内容时调用此方法     */    @Override    public boolean onQueryTextSubmit(String query) {        Toast.makeText(this, "Searching for:"+query+"...", 1).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();    }}
0 0