Android Menu

来源:互联网 发布:软件项目管理制度 编辑:程序博客网 时间:2024/06/04 00:52

珍惜作者劳动成果 转载请注明出处

普通菜单的实现

通常我们所说的菜单指的是我们屏幕右上方的”三个点” , 或者我们手机按键中的某个键, 一般会调出一个基于当前Activity的列表

实现步骤

1, 编写菜单xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <!--        item就是一个菜单项        必须设置 id, title属性 (其他可选)        另外的一些属性, 在ActionBar功能中使用        id: 事件点击的判断, 区分点击的菜单        app:showAsAction: 菜单项是否显示      -->    <item        android:id="@+id/action_settings"        android:title="@string/settings" />    <item        android:icon="@mipmap/ic_launcher"        app:showAsAction="always"        android:id="@+id/action_help"        android:title="@string/help"/></menu>

2, Activity 重写方法 进行菜单的加载

@Override    public boolean onCreateOptionsMenu(Menu menu) {        /*             MenuInflater 用于把菜单xml文件, 加载进来, 添加到menu中         */        getMenuInflater().inflate(R.menu.main_menu, menu);        /*            使用代码添加Menu             groupId  itemId order title             menu.add(0,   0,   0,  "设置");         *///        menu.add(0, R.id.action_settings, 0, R.string.settings);//        menu.add(0, R.id.action_help, 1, R.string.help);        return true;    }

3, Activity 重写方法, 菜单点击的事件处理

/*** OptionMenu 菜单点击时的事件回调* @param item* @return 如果返回true代表处理了点击事件, false表示不处理*/@Overridepublic boolean onOptionsItemSelected(MenuItem item) {   Intent intent = null;   switch (item.getItemId()) {       case R.id.action_settings:           //TODO: 处理菜单点击事件   (我要做但是还没做)           Toast.makeText(MainActivity.this, "设置被点击了", Toast.LENGTH_SHORT).show();           intent = new Intent(this, SettingsActivity.class);           startActivity(intent);           break;       case R.id.action_help:           intent = new Intent(this, HelpActivity.class);           startActivity(intent);           break;   }     return true; }

上下文菜单的实现

上下文菜单是基于当前列表的某个Item项, 它的作用范围只针对这个Item, 也就是说, 当我们长按某一项时可以弹出悬浮菜单栏供我们选择, 该菜单栏面向的是你点击那一项. 它通常用于ListView或GridView

实现步骤

1, 菜单xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:id="@+id/action_copy"        android:title="复制"/></menu>

2, 重写Activity方法, 加载上下文菜单

/** * 创建上下文菜单, * 每次需要显示上下文菜单的时候, 这个方法都会被调用 * * @param menu * @param v        需要显示上下文菜单的控件, 可以根据控件的Id, 来加载不同的菜单 * @param menuInfo */@Overridepublic void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {    getMenuInflater().inflate(R.menu.help_context_menu, menu);}

3, 上下文菜单点击

//点击事件    @Override    public boolean onContextItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.action_copy:                // TODO: 复制                //上下文菜单的附加信息, 只有在ListView和GridVIew中, 这个变量才可以使用                ContextMenu.ContextMenuInfo menuInfo = item.getMenuInfo();                if (menuInfo != null) {                    //如果是ListView或者GridView, 就用下面的这个类                    AdapterView.AdapterContextMenuInfo adapterMenuInfo =                            (AdapterView.AdapterContextMenuInfo) menuInfo;                    String s = mStrings.get(adapterMenuInfo.position);                    Toast.makeText(HelpActivity.this, "复制" + s, Toast.LENGTH_SHORT).show();                }                break;        }        return true;    }

4, 给特定的控件设置上下文菜单, 通常用于ListView/GridView

ListView listView = (ListView) findViewById(R.id.help_list);if (listView != null) {  listView.setAdapter(mAdapter);  //设置上下文菜单的创建监听器, 内部当需要上下文的时候会自动调用创建的方法  //Activity自身就是一个监听器, 可以直接调用  listView.setOnCreateContextMenuListener(this);  //高版本支持// if (Build.VERSION.SDK_INT >= 23) {  //可以使用版本适配, 来进行特定方法的调用//    listView.setOnContextClickListener(this);// }

PopupMenu菜单

 /*** 点击按钮显示一个PopupMenu * @param view */public void btnShowPopupMenu(View view) {    /*        1,创建PopupMenu对象        2, 获取MenuInflater对象        3, 显示        4, 实现菜单点击     */    // 第二个菜单: 代表弹出菜单在哪个控件上显示    PopupMenu popupMenu = new PopupMenu(this, view);//        popupMenu.//                getMenuInflater().//                inflate(R.menu.settings_popup_menu,popupMenu.getMenu() );    popupMenu.inflate(R.menu.settings_popup_menu);    //设置PopupMenu的item点击处理事件    popupMenu.setOnMenuItemClickListener(this);    popupMenu.setGravity(Gravity.BOTTOM);    popupMenu.show();}/**  * Item的点击  * @param item  * @return  */ @Override public boolean onMenuItemClick(MenuItem item) {     switch (item.getItemId()) {         case R.id.action_copy:              Toast.makeText(SettingsActivity.this, "复制", Toast.LENGTH_SHORT).show();             break;     }     return false; }
0 0
原创粉丝点击