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

本文详细介绍了如何在Android应用中使用ActionBar和Menu实现个性化菜单设计,包括自定义布局、添加菜单项及设置菜单功能,以及如何在主活动中集成并管理这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值