您的位置:首页 > 移动开发 > Android开发

个人安卓学习----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代码:

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文件转化的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息