安卓入门-UI Components 之Menu (菜单)
来源:互联网 发布:济南seo小武 编辑:程序博客网 时间:2024/05/19 00:14
安卓入门
--------------------------------------------------------------------------
UI Components 之Menu (菜单)
--------------------------------------------------------------------------
1)UI 对象(负责呈现view)
2)它不是view.它通过view呈现数据,实现与用户交互。
--------------------------------------------------------------------------
2.Menu 是什么?
1)Android 中的一种菜单对象类型。
2)Android 中的一种呈现view的对象。
3.Menu 对象应用类型?
1)选项菜单(Option Menu)
2)上下文菜单(Context Menu)
3)弹出式菜单(PopuMenu)
4)子菜单(SubMenu 每种菜单都有子菜单)
4.选项菜单构建及应用?
1)构建选项菜单(重写activity中的onCreateOptionMenu)
2)处理选项菜单监听(重写activity中的onOptionItemSelected)
5.上下文菜单的创建及应用(基于view的长按事件)
0)在view上注册上下文菜单(registerForContextMenu)
1)构建上下文菜单(重写activity中的onCreateContextMenu)
2)处理上下文菜单监听(重写activity中的onContextItemSelected)
案例:listview 长按时弹出上下文菜单(删除,分享)
public class MainActivity extends Activity {private List<String> data=new ArrayList<String>();public MainActivity() {data.add("A");data.add("B");data.add("C");}ArrayAdapter<String> adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); ListView lsv=(ListView) findViewById(R.id.lsvId); adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); lsv.setAdapter(adapter); //注册上下文菜单 registerForContextMenu(lsv);}/**长按listview的item时会执行此方法*/@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {//getMenuInflater().inflate(menuRes, menu)//基于java方式创建菜单项menu.add(0, 101,//itemId201,//orderId (序号)"删除"//title);menu.add(0, 102,//itemId202,//orderId"分享"//title);}/**当我们点击上下文菜单中的选项时自动执行此方法*/@Overridepublic boolean onContextItemSelected(MenuItem item) {ContextMenuInfo c=item.getMenuInfo();Log.i("TAG", "c="+c);AdapterContextMenuInfo acm=(AdapterContextMenuInfo)c;//获得长按的位置int pos=acm.position;if(item.getItemId()==101){//删除数据 data.remove(pos); //刷新listview adapter.notifyDataSetChanged();}else if(item.getItemId()==102){ //分享的action: ACTION_SEND Intent target=new Intent(Intent.ACTION_SEND); //设置税局类型 target.setType("text/*"); //设置要分享的数据 target.putExtra(Intent.EXTRA_TEXT, data.get(pos)); //创建分享目标 Intent intent= Intent.createChooser(target, "请选择"); //启动activity startActivity(intent);}return true;}}
6.弹出式菜单(基于view的点击事件):了解
1)创建菜单(PopuMenu)及菜单项
2)显示菜单(show)
3)添加监听(setOnMenuItemClickListener)
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}public void onClick(final View v){//构建菜单对象PopupMenu pm=new PopupMenu(this, v);//初始化菜单中的itempm.getMenuInflater().inflate(R.menu.pop,pm.getMenu());//pm.getMenu().add(groupId, itemId, order, title)//添加监听pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {((Button)v).setText(item.getTitle());return false;}});//显示菜单pm.show(); }}
8.子菜单(菜单项中还可以添加菜单)
案例:选项菜单中添加子菜单(xml,java)
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}private Menu menu;@Overridepublic boolean onCreateOptionsMenu(Menu menu) {this.menu=menu;// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);//通过java方式添加子菜单SubMenu sm=menu.addSubMenu(0,1000,101, "item02");MenuItem item=menu.findItem(1000);item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); //添加菜单项sm.add(0, 2000, 200, "item0002");return true;}public void onClick(View v){menu.setGroupVisible(R.id.group01, true);}}menu-xml文件如下:
<?xml version="1.0"?>-<menu xmlns:android="http://schemas.android.com/apk/res/android">-<group android:visible="false" android:id="@+id/group01">-<item android:title="item01" android:id="@+id/item01" android:showAsAction="ifRoom" android:orderInCategory="100">-<menu><item android:title="item001" android:id="@+id/item001" android:showAsAction="never" android:orderInCategory="300"/><item android:title="item002" android:id="@+id/item002" android:showAsAction="never" android:orderInCategory="301"/></menu></item></group></menu>
7.菜单的分组(可以同时显示或隐藏多个菜单项)
1)创建(xml:group)
2)调用menu对象的相关方法操作分组(例如显示或隐藏setGroupVisible)
9.侧滑菜单(菜单扩展)
1)DrawerLayout 布局(根元素必须是drawerlayout)
2)DrawerLayout 对象 (findViewByid)
a)初始化listview对象(侧滑item对象)
b)初始化framelayout对象
3)DrawerLayout 添加监听对象
public class MainActivity extends Activity implements OnItemClickListener {private List<Item> list=new ArrayList<Item>();public MainActivity() {list.add(new Item(android.R.drawable.ic_menu_save,"我的收藏"));list.add(new Item(android.R.drawable.ic_menu_camera,"我的设置"));list.add(new Item(android.R.drawable.ic_menu_delete,"退出"));}private DrawerLayout drawerLayout;private TextView contentTv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);setDrawerLayout();setDrawerListView();setContent();}private void setContent() {contentTv=(TextView) findViewById(R.id.textId);}private void setDrawerListView() {ListView lsv=(ListView) findViewById(R.id.lsvId); lsv.setAdapter(new ArrayAdapter<Item>(this, android.R.layout.simple_list_item_1,list){ @Override public View getView(int position, View convertView, ViewGroup parent) { TextView v=(TextView)View.inflate(getContext(), android.R.layout.simple_list_item_1, null); Item item=getItem(position); //获得图片资源的drawable对象 Drawable left=getResources() .getDrawable(item.getLogo()); //设定对象的边界 left.setBounds(0, 0,50, 50); //将left对象绘制到v的左边 v.setCompoundDrawables(left, null, null, null); v.setText(item.getName()); return v; } }); lsv.setOnItemClickListener(this);}private ActionBarDrawerToggle drawerToggle;private void setDrawerLayout() { getActionBar().setDisplayHomeAsUpEnabled(true);//显示图标drawerLayout=(DrawerLayout) findViewById(R.id.drawerLayoutId); drawerToggle=new ActionBarDrawerToggle(this, drawerLayout, R.drawable.top_menu_on, R.string.open_drawer,R.string.close_drawer){ @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); setTitle("Open"); } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); setTitle("Close"); } };drawerLayout.setDrawerListener(drawerToggle);}/**选项菜单创建之前执行,在此方法中同步drawerLayout状态*/@Overrideprotected void onPostCreate(Bundle savedInstanceState) {super.onPostCreate(savedInstanceState);drawerToggle.syncState();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {//打开或收起drawerlayout对象if(drawerToggle.onOptionsItemSelected(item)){return true;}return true;}@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position,long id) {Item item=(Item)parent.getItemAtPosition(position);contentTv.setText(item.getName());drawerLayout.closeDrawer(parent);}class Item{private int logo;private String name;public Item(int logo,String name) {this.logo=logo;this.name=name;}public int getLogo() {return logo;}public String getName() {return name;}}}
--------------------------------------------------------------------------
--------------------------------------------------------------------------
1 0
- 安卓入门-UI Components 之Menu (菜单)
- 安卓入门-UI Components之 ActionBar ,Dialog,Notification ,Toast
- UI控件之菜单(Menu)
- 安卓Andriod使用入门(一)【圆形Menu菜单】
- 安卓学习之路之菜单Menu
- Android系列之UI组件----Menu菜单
- Android系列之UI组件----Menu菜单
- Android系列之UI组件----Menu菜单
- Android系列之UI组件----Menu菜单
- 安卓学习之路_20140504_拼图游戏步骤回放、menu菜单
- 【Android】安卓学习笔记之在Activity中使用Menu菜单
- Android学习:用户界面UI之菜单(Menu)
- node-webkit教程(6)Native UI API 之Menu(菜单)
- Android UI学习 - Menu菜单
- 安卓开发复习笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- 安卓入门-UI 之自定义actionbar样式
- 安卓入门之UI组件:AdapterView及其子类
- 第二个代码模型(数据表与简单Java类映射)
- c++文件读写
- 右补齐
- 深入简单Java类与数据表之间多对多映射
- XZ_iOS之UITableView的代理方法的执行顺序
- 安卓入门-UI Components 之Menu (菜单)
- 回文字符 Linux下编程
- 不小心删除PowerDesigner里面的一个小工具,怎么恢复
- View和View的参数传递
- HTTP头域列表与解释 之 request篇
- 深入简单Java类(一对多映射
- Win7系统安装MySQL5.5.21图解教程
- Java源码-字符串大小比较(Comparing Strings)
- FastJson:常规使用,积少成多: