个人安卓学习----ActivityのMenu菜单
2011-12-12 21:52
501 查看
周六日休息,有点懈怠了,没有学习,补充元气,继续努力,加油(*^__^*) !
要学习菜单,我们需要先知道什么是菜单,来看一下~
打开模拟器或者手机,点击menu键
,如图标志位置即为菜单
如图,Android的选项菜单是默认不见的,当用户按下Menu键时程序菜单将会出现在屏幕下方。Android系统默认最多只有6个菜单位,如果超过6个菜单,系统将会在第6个菜单位显示“更多”。
如图,Android系统的菜单注意通过4个接口来体现
图画得不好,大家主要看意思啊~
Menu接口是个父接口,接口下有两个子接口。
Submenu:它代表了一个子菜单,它可以包含多个MenuItem(形成菜单项)。
ContextMenu:它代表一个上下文菜单。它也可以包含多个MenuItem。
Menu定义了如下方法来添加菜单和菜单项。
MenuItem add(int titleRes)添加一个新的菜单项。
MenuItem add(int groupId,int itemId,int order,CharSequence title)添加一个新的处于groupId组的菜单项
MenuItem add(int groupId,int itemId,int order,int titleRes)添加一个新的处于groupId组的菜单项
MenuItem add(CharSequence title)添加一个新的菜单项
SubMenu addSubMenu(int titleRes)添加一个新的子菜单
SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes)添加一个新的处于groupId组的子菜单
综述:add方法用于添加菜单项,addSubMenu用于添加子菜单,这些重载方法的区别是:是否将子菜单,菜单项添加到指定菜单中,是否使用资源文件中的字符串资源来设置标题。
下面我们看一下Android程序中如何添加菜单和子菜单
我想要实现一个这样的效果,在Activity中添加一个EditText,我通过下方的Menu菜单和子菜单,完成更改字体颜色和大小的功能。如图:
好,现在我们可以看到,要实现这种效果,我们需要添加3个菜单项,在字体菜单项中我们需要添加5个子菜单项,在颜色菜单项中我们需要添加3个子菜单项,下面我们开始写代码。
我们需要做的第一步:重写Activity中的onCreateOptionsMenu(Menu menu)的方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单
第二步:如果希望程序能响应菜单项的点击事件,重写Activity的onOptionsItemSelected(MenuItem mi)方法即可。
这个程序的布局文件,只是在Activity中添加了一个EditText,这里就不做展示了
Java代码:
如图,大家看到我所有的代码都是在Java中完成的,那么如何利用xml定义选项菜单呢?
android.view.MenuInflater
This class is used to instantiate menu XML files into Menu objects.这个类被用来使菜单xml文件实例化为菜单对象
首先我们新建一个menu文件夹,在其中新建一个option_menu.xml文件,文件内容如下
为将xml文件转化的代码
要学习菜单,我们需要先知道什么是菜单,来看一下~
打开模拟器或者手机,点击menu键
,如图标志位置即为菜单
如图,Android的选项菜单是默认不见的,当用户按下Menu键时程序菜单将会出现在屏幕下方。Android系统默认最多只有6个菜单位,如果超过6个菜单,系统将会在第6个菜单位显示“更多”。
如图,Android系统的菜单注意通过4个接口来体现
图画得不好,大家主要看意思啊~
Menu接口是个父接口,接口下有两个子接口。
Submenu:它代表了一个子菜单,它可以包含多个MenuItem(形成菜单项)。
ContextMenu:它代表一个上下文菜单。它也可以包含多个MenuItem。
Menu定义了如下方法来添加菜单和菜单项。
MenuItem add(int titleRes)添加一个新的菜单项。
MenuItem add(int groupId,int itemId,int order,CharSequence title)添加一个新的处于groupId组的菜单项
MenuItem add(int groupId,int itemId,int order,int titleRes)添加一个新的处于groupId组的菜单项
MenuItem add(CharSequence title)添加一个新的菜单项
SubMenu addSubMenu(int titleRes)添加一个新的子菜单
SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes)添加一个新的处于groupId组的子菜单
综述:add方法用于添加菜单项,addSubMenu用于添加子菜单,这些重载方法的区别是:是否将子菜单,菜单项添加到指定菜单中,是否使用资源文件中的字符串资源来设置标题。
下面我们看一下Android程序中如何添加菜单和子菜单
我想要实现一个这样的效果,在Activity中添加一个EditText,我通过下方的Menu菜单和子菜单,完成更改字体颜色和大小的功能。如图:
好,现在我们可以看到,要实现这种效果,我们需要添加3个菜单项,在字体菜单项中我们需要添加5个子菜单项,在颜色菜单项中我们需要添加3个子菜单项,下面我们开始写代码。
我们需要做的第一步:重写Activity中的onCreateOptionsMenu(Menu menu)的方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单
第二步:如果希望程序能响应菜单项的点击事件,重写Activity的onOptionsItemSelected(MenuItem mi)方法即可。
这个程序的布局文件,只是在Activity中添加了一个EditText,这里就不做展示了
Java代码:
package song.activity; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.EditText; import android.widget.Toast; public class MenuTestActivity extends Activity { // 定义字体大小菜单项的标识 final int FONT_10 = 0x111; final int FONT_12 = 0x112; final int FONT_14 = 0x113; final int FONT_16 = 0x114; final int FONT_18 = 0x115; // 定义普通菜单项的标识 final int PLAIN_ITEM = 0x11b; // 定义字体颜色菜单项的标识 final int FONT_RED = 0x116; final int FONT_BLUE = 0x117; final int FONT_GREEN = 0x118; private EditText edit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit = (EditText) findViewById(R.id.txt); } @Override public boolean onCreateOptionsMenu(Menu menu) { // -------------向menu中添加字体大小的子菜单------------- SubMenu fontMenu = menu.addSubMenu("字体大小"); // 设置菜单的图标 fontMenu.setIcon(R.drawable.font); // 设置菜单头的图标 fontMenu.setHeaderIcon(R.drawable.font); // 设置菜单头的标题 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号字体"); fontMenu.add(0, FONT_18, 0, "18号字体"); // -------------向menu中添加普通菜单项------------- menu.add(0, PLAIN_ITEM, 0, "普通菜单项"); // -------------向menu中添加文字颜色的子菜单------------- SubMenu colorMenu = menu.addSubMenu("字体颜色"); colorMenu.setIcon(R.drawable.color); // 设置菜单头的图标 colorMenu.setHeaderIcon(R.drawable.color); // 设置菜单头的标题 colorMenu.setHeaderTitle("选择文字颜色"); colorMenu.add(0, FONT_RED, 0, "红色"); colorMenu.add(0, FONT_GREEN, 0, "绿色"); colorMenu.add(0, FONT_BLUE, 0, "蓝色"); return super.onCreateOptionsMenu(menu); } @Override // 菜单项被单击后的回调方法 public boolean onOptionsItemSelected(MenuItem mi) { //判断单击的是哪个菜单项,并针对性的作出响应。 switch (mi.getItemId()) { case FONT_10: edit.setTextSize(10 * 2); break; case FONT_12: edit.setTextSize(12 * 2); break; case FONT_14: edit.setTextSize(14 * 2); break; case FONT_16: edit.setTextSize(16 * 2); break; case FONT_18: edit.setTextSize(18 * 2); break; case FONT_RED: edit.setTextColor(Color.RED); break; case FONT_GREEN: edit.setTextColor(Color.GREEN); break; case FONT_BLUE: edit.setTextColor(Color.BLUE); break; case PLAIN_ITEM: Toast toast = Toast.makeText(MenuTestActivity.this , "您单击了普通菜单项" , Toast.LENGTH_SHORT); toast.show(); break; } return true; } }
如图,大家看到我所有的代码都是在Java中完成的,那么如何利用xml定义选项菜单呢?
android.view.MenuInflater
This class is used to instantiate menu XML files into Menu objects.这个类被用来使菜单xml文件实例化为菜单对象
首先我们新建一个menu文件夹,在其中新建一个option_menu.xml文件,文件内容如下
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/font" android:icon="@drawable/font" android:title="设置字体大小" android:titleCondensed="字体大小"> <menu > <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号字体" /> <item android:id="@+id/FONT_18" android:title="18号字体" /> </menu> </item> <item android:id="@+id/normal" android:title="普通菜单项"/> <item android:id="@+id/color" android:icon="@drawable/color" android:title="字体颜色"> <menu> <item android:id="@+id/FONT_RED" android:title="红色" /> <item android:id="@+id/FONT_GREEN" android:title="黄色" /> <item android:id="@+id/FONT_BLUE" android:title="绿色" /> </menu> </item> </menu>Activity的Java文件:
package song.activity; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MenuItem.OnMenuItemClickListener; import android.view.SubMenu; import android.widget.EditText; import android.widget.Toast; public class MenuTestActivity extends Activity implements OnMenuItemClickListener { private EditText edit; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); edit = (EditText) findViewById(R.id.txt); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.option_menu, menu); for(int i=0; i<menu.size(); i++){ menu.getItem(i).setOnMenuItemClickListener(this); } SubMenu smenu1 = menu.findItem(R.id.font).getSubMenu(); for(int i=0; i<smenu1.size(); i++){ smenu1.getItem(i).setOnMenuItemClickListener(this); } SubMenu smenu2 = menu.findItem(R.id.color).getSubMenu(); for(int i=0; i<smenu2.size(); i++){ smenu2.getItem(i).setOnMenuItemClickListener(this); } return true; } @Override public boolean onMenuItemClick(MenuItem mi) { //判断单击的是哪个菜单项,并针对性的作出响应。 switch (mi.getItemId()) { case R.id.FONT_10: edit.setTextSize(10 * 2); break; case R.id.FONT_12: edit.setTextSize(12 * 2); break; case R.id.FONT_14: edit.setTextSize(14 * 2); break; case R.id.FONT_16: edit.setTextSize(16 * 2); break; case R.id.FONT_18: edit.setTextSize(18 * 2); break; case R.id.FONT_RED: edit.setTextColor(Color.RED); break; case R.id.FONT_GREEN: edit.setTextColor(Color.GREEN); break; case R.id.FONT_BLUE: edit.setTextColor(Color.BLUE); break; case R.id.normal: Toast toast = Toast.makeText(MenuTestActivity.this , "您单击了普通菜单项" , Toast.LENGTH_SHORT); toast.show(); break; } return true; } }其中
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.option_menu, menu); for(int i=0; i<menu.size(); i++){ menu.getItem(i).setOnMenuItemClickListener(this); } SubMenu smenu1 = menu.findItem(R.id.font).getSubMenu(); for(int i=0; i<smenu1.size(); i++){ smenu1.getItem(i).setOnMenuItemClickListener(this); } SubMenu smenu2 = menu.findItem(R.id.color).getSubMenu(); for(int i=0; i<smenu2.size(); i++){ smenu2.getItem(i).setOnMenuItemClickListener(this); } return true; }
为将xml文件转化的代码
相关文章推荐
- 个人安卓学习----初学Activityの生命周期
- 个人安卓学习笔记---初学Activityの简单布局切换
- 个人安卓学习笔记---初学Activityの简单布局切换
- 个人安卓学习----ActivityのMenu菜单
- Android学习记录(五) 记录一下最近遇到的坑:android actionbar menu菜单无显示。
- 安卓ApiDemos学习 app/Activity/HelloWorld
- Android个人学习笔记之ListView知识应用-仿IOS百度云条目点击显示菜单模块实现
- 安卓Andriod使用入门(一)【圆形Menu菜单】
- 安卓学习之--如何关闭所有的activity
- 安卓学习笔记之service和activity
- 安卓Api Demo学习 App/Activity/Dialog
- 安卓ApiDemos学习 app/Activity/Animation
- ApiDemo的学习总结,个人心得,App模块之Activity
- 安卓学习之路之Fragment和Activity之间的传值
- 个人安卓学习笔记---java.io.IOException: Unable to open sync connection!
- 个人安卓学习笔记---分别利用SAX、DOM和Pull实现对XML文件的解析并进行单元测试
- 安卓学习之--如何关闭所有的activity
- 安卓开发之左侧滑动菜单学习
- 安卓学习第28天:使用Intent在活动之间传递数据以及Activity的生命周期实例
- 安卓学习-activity-LauncherActivity