day4.09总结_Menu 菜单
2016-05-04 00:36
411 查看
(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=m 4000 enu.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) } } |
相关文章推荐
- PHP之验证码的实现
- day4.08总结_UI控件
- immutableJS一些API
- 让IIS支持无后缀名访问
- web前端开发初学者十问集锦(1)
- Java动态代理的异常处理问题
- web前端开发初学者十问集锦(1)
- php实习的tips(常用的head头)
- php的tips(生成随机函数rand与srand)
- day4.06总结_Adapter自定义和优化和ListView
- Android中资源文件的使用
- 20160504收获
- 仿带噪点和横线的验证码自定义View
- day4.05总结_Adapter和Listview的优化
- windows下利用ffmpeg进行视频格式转换
- cocos2d-x-3.x snapshot
- Shell 备忘录【1】
- 布隆过滤器(Bloom Filter)Java实现 - printk(KERN
- PHP之时间处理
- day3.30总结_pull解析和反射