Android第二章(3)
来源:互联网 发布:操作说明书制作软件 编辑:程序博客网 时间:2024/06/10 09:58
菜单:
只有按手机的菜单键才会弹出来,有Menu,SubMenu,MenuItem3个类。在public boolean onCreateOptionsMenu(Menu menu);这个函数构造菜单,当选中一个菜单项的时候就会到public boolean onOptionsItemSelected(MenuItem item);函数中处理。
当一个子菜单有多个菜单项的时候就会像对话框一样弹出多个菜单项,那个对话框的顶部可以设置文字和Icon,下面是一段示例:
SubMenu fontmenu=menu.addSubMenu("字体大小");fontmenu.setHeaderIcon(R.drawable.ic_launcher);fontmenu.setHeaderTitle("设置字体大小");fontmenu.add(0, FONT_10, 0, "10号字");fontmenu.add(0, FONT_12, 0, "12号字");fontmenu.add(0, FONT_14, 0, "14号字");fontmenu.add(0, FONT_16, 0, "16号字");那个groupid暂时还不清楚,书也没说,order我猜就是菜单项的顺序,设为0就按照你代码的先后顺序了,第二个参数是菜单项的id.
接着处理菜单项的响应函数:
public boolean onOptionsItemSelected(MenuItem item){switch(item.getItemId()){case FONT_10:editText.setTextSize((float) (20));break;case FONT_12:editText.setTextSize((float) (24));break;case FONT_14:editText.setTextSize((float) (28));break;case FONT_16:editText.setTextSize((float) (32));break;
ContextMenu-----上下文菜单,当长按一个组件就会弹出来的菜单叫上下文菜单。它是Menu的子类,所以那些add()也同样可用,它是在
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo);里面构造,菜单项的响应在
public boolean onContextItemSelected(MenuItem item)里面。
例子如下:
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo){// TODO Auto-generated method stubmenu.add(0, COLOR_RED, 0, "red");menu.add(0, COLOR_GREEN, 0, "green");menu.add(0, COLOR_BLUE, 0, "blue");super.onCreateContextMenu(menu, v, menuInfo);}
public boolean onContextItemSelected(MenuItem item){// TODO Auto-generated method stubswitch(item.getItemId()){case COLOR_RED:show.setTextColor(Color.RED);break;case COLOR_GREEN:show.setTextColor(Color.GREEN);break;case COLOR_BLUE:show.setTextColor(Color.BLUE);break;default:break;}return true;}除此之外,一个做好了的ContextMenu还要和一个View组件绑定在一起,那个组件长按才会弹出ContextMenu的:
protected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText=(EditText)findViewById(R.id.edit);show=(TextView)findViewById(R.id.show);registerForContextMenu(show);}
用XML写菜单:
菜单资源位于res/menu中,就3个标签<menu>,<item>,<group>,<item>代表的就是菜单项了,<item>里面可以加<menu>形成子菜单,<group>把一组<item>包含起来,形成一个小组。下面是上面的示例的XML化:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:title="字体大小" android:icon="@drawable/ic_launcher"> <menu > <group android:checkableBehavior="single"> <item android:id="@+id/font_10" android:title="10号字" /> <item android:id="@+id/font_12" android:title="12号字" /> <item android:id="@+id/font_14" android:title="14号字" /> <item android:id="@+id/font_16" android:title="16号字" /> </group> </menu> </item> <item android:id="@+id/plain" android:title="普通菜单项"/> <item android:title="字体颜色"> <menu > <item android:id="@+id/color_red" android:title="红色"/> <item android:id="@+id/color_green" android:title="绿色"/> <item android:id="@+id/ccolor_blue" android:title="蓝色"/> </menu> </item></menu>而在java代码中通过MenuInflater的inflate函数把资源和menu联系起来:
public boolean onCreateOptionsMenu(Menu menu){MenuInflater inflater=new MenuInflater(this);inflater.inflate(R.menu.my_menu, menu);return super.onCreateOptionsMenu(menu);}
public boolean onOptionsItemSelected(MenuItem item){switch(item.getItemId()){case R.id.font_10:editText.setTextSize((float) (20));item.setChecked(true);break;case R.id.font_12:editText.setTextSize((float) (24));item.setChecked(true);break;case R.id.font_14:editText.setTextSize((float) (28));item.setChecked(true);break;case R.id.font_16:editText.setTextSize((float) (32));item.setChecked(true);break;case R.id.color_red:editText.setTextColor(Color.RED);break;case R.id.color_green:editText.setTextColor(Color.GREEN);break;case R.id.ccolor_blue:editText.setTextColor(Color.BLUE);break;default:break;}return true;}
PopupMenu:会在组件的下方弹出来的菜单
主要3个步骤:1建立PopupMenu对象,第二个参数是激发该菜单出现的组件,2利用inflate函数把菜单资源填充到popupmenu中,3show()出来
btn.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0){// TODO Auto-generated method stubpopupMenu=new PopupMenu(MainActivity.this, btn);getMenuInflater().inflate(R.menu.my_popupmenu, popupMenu.getMenu());popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){@Overridepublic boolean onMenuItemClick(MenuItem arg0){// TODO Auto-generated method stubif(arg0.getItemId()==R.id.click_me){Toast toast=Toast.makeText(MainActivity.this, "多手", Toast.LENGTH_SHORT);toast.show();}else if(arg0.getItemId()==R.id.exit){popupMenu.dismiss();}return false;}});popupMenu.show();}});
0 0
- Android第二章(3)
- Android第二章
- Android第二章(2)
- Android 第二章
- 第二章:Android开发基础
- 初学android第一章、第二章
- 《Android群英传》第一章~第二章
- Android群英传 第二章-ADB
- Android 内存优化 第二章
- 第3章Android Dalvik虚拟机 第二节
- Android讲义3---第二章其他基础组件
- 《Android编程权威指南》第二版 第二章 挑战练习
- 第二章3
- 第二章 Android内核和驱动程序(转)
- 第二章 Android内核和驱动程序(转)
- 第二章:Android,Getting Start(一)
- 第二章:Android,Getting start(二)
- jQuery Mobile设计Android通讯录(第二章)
- 通过java类文件识别JDK编译版本
- Evolution +zoj+矩阵快速幂
- WINPE DIY
- 二、负载均衡之DNS域名解析
- iOS_1_加法器
- Android第二章(3)
- spark问题
- Java垃圾回收机制以及内存泄露
- 三、负载均衡之反向代理
- 大整数组合数求余(lucas定理)
- 四、负载均衡之IP分配
- Python模块学习 --- urllib
- HDU-#1242 Rescue(BFS)
- HDU 4864 Task