day4.09总结_Menu 菜单

(1)选项菜单 (Option Menu):

通常会结合actionBar使用

1)onCreateOptionsMenu (此方法中创建菜单)

2)onOptionsItemSelected(此方法中处理菜单的点击操作)

例子1:菜单的初始化——监听器

public class MainActivity extends Activity {

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

         /**此方法会在父类的onCreate方法中进行回调,用于创建

          * 一些选项菜单*/

         @Override

         public boolean onCreateOptionsMenu(Menu menu) {

        

                   getMenuInflater().inflate(R.menu.main,menu);    初始化一个菜单

                   //可选:获得item

                   MenuItem item=menu.findItem(R.id.item00);

                   SearchView sv=(SearchView)item.getActionView();    获取搜索框view

                   //sv.setOnQueryTextListener(listener)               添加监听器

                   return true;

         }

         /**监听选项菜单的item的点击事件*/

         @Override

         public boolean onOptionsItemSelected(MenuItem item) {

                   int id=item.getItemId();           获取菜单项的ID

                   if(id==R.id.item02){

                     //Toast.makeText(this, "拨号", 1).show();

                     Intent intent=new Intent(Intent.ACTION_CALL);   跳转到打电话页面

                     intent.setData(Uri.parse("tel:010")); 拨打的号码 

                     startActivity(intent);        

                   }else if(id==R.id.item03){

                   }

                   return true;

         }

}

设置权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

 

(2)上下文菜单 (Context Menu):

基于某个view的长按事件

1)创建:onCreateContextMenu

2)注册(在view上注册):registerForContextMenu

3)监听:onContextItemSelected

例子2:长按删除选项

public class MainActivity extends ListActivity {

 

         private List<String> list;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   //setContentView(R.layout.activity_main);

             list=new ArrayList<String>();

             list.add("A");list.add("B");list.add("C");

setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list));

              //listview上注册上下文菜单

                   registerForContextMenu(getListView());

         }

         /**当长按注册了上下文菜单的view对象时就会执行此方法*/

         @Override

         public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo) {

                     //1.基于xml方式

                   getMenuInflater().inflate(R.menu.context_main_1, menu);

                     //2.基于java方式

                   //menu.add(groupId, itemId, order, title)

             //SubMenu sm= menu.addSubMenu(groupId, itemId, order, title)

             //sm.add(groupId, itemId, order, title)

         }

         @Override

         public boolean onContextItemSelected(MenuItem item) {

                   //获得菜单项相关信息

                   AdapterContextMenuInfo c=(AdapterContextMenuInfo)item.getMenuInfo();

                   Log.i("TAG", "c="+c);

                   //获得长按的item位置

                   int pos=c.position;

                   if(item.getItemId()==R.id.delete){

                   Toast.makeText(this, "删除", 1).show();

                  

                   //删除内存数据

                   list.remove(pos);

                   //通知更新

                   ((ArrayAdapter<?>)

                    getListAdapter())//ListAdapter(接口)

                   .notifyDataSetChanged();

                   }

                   return super.onContextItemSelected(item);

         }

}

 

例子3:java方式创建菜单

         public boolean onCreateOptionsMenu(Menu menu) {

                   // Inflate the menu; this adds items to the action bar if it is present.

                   //getMenuInflater().inflate(menuRes, menu)

                 

                   MenuItem item01=menu.add(1, 100, 200, "item01");  保证第二项的ID不相同

                   item01.setIcon(android.R.drawable.ic_menu_add);

                   item01.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

                  

                   MenuItem item02=menu.add(1, 101, 201, "item02");

                   item02.setIcon(android.R.drawable.ic_menu_close_clear_cancel);

                   item02.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

                  

                   MenuItem item03=menu.add(1, 102, 201, "item02");

                   item03.setIcon(android.R.drawable.ic_menu_search);

                  item03.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

                   item03.setActionView(new SearchView(this));

                  

                   //menu.addSubMenu(groupId, itemId, order, title)

                   return true;

         }

 

 

 

(3)弹出式菜单 (Popu Menu):

基于某个view的点击事件

例子4:弹出式菜单

public class MainActivity extends Activity {

        

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

    public void onClick(final View v){

             //1.构建一个PopuMenu对象,并将此对象注册到一个view

             PopupMenu pm=new PopupMenu(this, v);

             //2.构建菜单项对象

             /*pm.getMenuInflater()

             .inflate(R.menu.main,

             pm.getMenu());*/

             pm.getMenu().add(1, 1,100, "A");

             pm.getMenu().add(1, 2,101, "B");

             pm.getMenu().add(1, 3,102, "C");

             //添加监听器

             pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                            @Override

                            public boolean onMenuItemClick(MenuItem item) {

                                     ((Button)v).setText(item.getTitle());        获取选项的文本

                                     return true;

                            }

                   });

             //3.显示菜单

             pm.show();

    }

}

(4).子菜单(以上每种菜单都可以创建子菜单)

 

例子5:子菜单

    <item

        android:id="@+id/action_settings"

        android:orderInCategory="100"

        android:showAsAction="always"

        android:title="@string/action_settings"

        android:icon="@android:drawable/ic_menu_set_as">

       

        <menu>

            <item android:id="@+id/item01"

                android:orderInCategory="200"

                android:showAsAction="never"

                android:title="item01"/>

            <item android:id="@+id/item02"

                android:orderInCategory="201"

                android:showAsAction="never"

                android:title="item01"/>

        </menu>

    </item>

例子6:实现菜单的分组(便于统一显示或隐藏)

public class MainActivity extends Activity {

 

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

         }

         private Menu optionMenu;

         @Override

         public boolean onCreateOptionsMenu(Menu menu) {

              // Inflate the menu; this adds items to the action bar if it is present.

                   getMenuInflater().inflate(R.menu.main, menu);

                   this.optionMenu=menu;

                   return true;

         }

         boolean flag=true;

         public void onClick(View v){

                   if(flag){

                            flag=false;

                   }else{

                            flag=true;

                   }

                   optionMenu.setGroupVisible(R.id.group01,flag);参数一:菜单组

参数二:隐藏(false)或显示(true

         }

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值