Menu的三个实现方式

1:菜单的设计在人机交互中是非常人性化的,它提供了不同功能分组展示的能力。Android平台提供了3菜单的实现方式,即选项菜单(OptionMenu)、上下文菜单(ContextMenu)、子菜单(SubMenu). 

 

2:创建一个菜单的步骤:  设置菜单-----》得到菜单-----》监听菜单

1):重写onCreateOptionsMenu或者onCreateContextMenu

2):调用Menuadd方法添加菜单项(MenuItem),可以调用MneuItemsetIcon方法来为菜单设置图标。

 

3):当菜单项(Menuitem)被选择时,重写ActivityonOptionsItemSelected()

方法来响应事件。


java代码:

@Override
public boolean onCreateOptionsMenu(Menu menu){
//用基类的方法,以便调出系统菜单(如果有的话)
super.onCreateOptionsMenu(menu);

//添加菜单
menu.add(0,1,0,“重新开始”).setIcon(R.drawable.reflash);
menu.add(0,2,0,"游戏指南").setIcon(R.drawable.help);
menu.add(0,3,0,"关于游戏").setIcon(R.drawable.info);
menu.add(0,4,0,"不想玩了").setIcon(R.drawable.exit);
//返回值为“true”,表示菜单可见,即显示菜单
return true;
}
       看一看menu.add方法的参数:
       第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。
       第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。
       第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
       第四个String类型的title参数,表示选项中显示的文字。



1 Option Menu 
这种应该是最常见的,一般手机上都会提供Menu的按钮,对应的就是这个菜单弹出。

 

主要步骤就是复写Activity父类中的onCreateOptionMenuMenu menu)方法,然后通过Menuadd方法来添加菜单进去。 
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView  

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="测试选项菜单"/>

</LinearLayout>

 

public class MenuDemo extends Activity {

private static final int ITEM1 = Menu.FIRST;

private static final int ITEM2 = Menu.FIRST+1;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.menutest);

    }

 

/**

 * 覆盖该方法添加菜单项

 */

    @Override

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, 1, 0, "开始游戏");

menu.add(0, 2, 0, "暂停游戏");

menu.add(0, 3, 0, "退出游戏");

return true;

}

// public boolean onCreateOptionsMenu(Menu menu) {

// menu.add(0, 1, 0, "开始").setIcon(R.drawable.earth_01);

// menu.add(0, 2, 0, "暂停").setIcon(R.drawable.earth_02);

// menu.add(0, 3, 0, "退出").setIcon(R.drawable.earth_03);

// return true;

// }    

    /**

     * 覆盖该方法,响应菜单选项被单击事件

     */

    public boolean onOptionsItemSelected(MenuItem item) {

     switch (item.getItemId()) {

case 1:

setTitle("开始游戏!");//设置标题;可以通过Intent跳转到相关页面

Toast.makeText(MenuDemo.this, "开始游戏!", Toast.LENGTH_LONG).show();

break;

case 2:

setTitle("暂停游戏");

Toast.makeText(MenuDemo.this, "暂停游戏!", Toast.LENGTH_LONG).show();

break;

case 3:

setTitle("退出游戏");

Toast.makeText(MenuDemo.this, "推出游戏!", Toast.LENGTH_LONG).show();

}

     return true;

    }

}


2.Context Menu 
   当用户长时间按键不放,弹出的菜单称为上下文菜单。我们经常在windows中用鼠标右键单击弹出的菜单就是上下文菜单。

创建上下文ContextMenu菜单的步骤:

1、 覆盖ActivityonCreateContextMenu()方法,

2、 调用Menuadd方法添加菜单项

3  覆盖onContexItemSelected()方法,响应菜单单击事件

4  调用registerForContextMenu(View v)方法为视图注册上下文菜单v代表某一view

public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

参数说明:

menu:需要显示的快捷菜单

vV是用户选择的界面元素

menuInfomenuInfo是所选择界面元素的额外信息

说明:这个onCreateContextMenuonCreateOptionsMenu函数不一样,onCreateOptionsMenu函数仅在选项菜单第一次启动时被调用一次,onCreateContextMenu函数在每次启动都将会被调用一次。 

 

当菜单项(Menuitem)被选择时,重写ActivityonOptionsItemSelected()

方法来响应事件。

public boolean onContextItemSelected (MenuItem item)

 

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

 

<TextView 

    android:id="@+id/TextView01" 

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent" 

    android:text="测试上下文菜单(改变文字背景色)">

    

</TextView>

</LinearLayout>

 

public class MenuDemo2 extends Activity {

private TextView myTV;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.menutest2);

myTV = (TextView)findViewById(R.id.TextView01);

registerForContextMenu(myTV);

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {

menu.add(0, 1, 0, "红色背景");

menu.add(0, 2, 0, "绿色背景");

menu.add(0, 3, 0, "白色背景");

}

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case 1:

myTV.setBackgroundColor(Color.RED);

break;

case 2:

myTV.setBackgroundColor(Color.GREEN);

break;

case 3:

myTV.setBackgroundColor(Color.WHITE);

break;

}

return true;

}

}

 

 

3 SubMenu :
子菜单就是将相同功能的分组进行多级显示的一种菜单。就是菜单下面还有菜单。

实际上就是把以上两种结合到一起。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView  

    android:layout_width="fill_parent" 

    android:layout_height="wrap_content" 

    android:text="测试子菜单"/>

</LinearLayout>

 

public class MenuDemo3 extends Activity {

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.menutest3);

    }

/**

 * 覆盖该方法添加子菜单项

 */

public boolean onCreateOptionsMenu(Menu menu) {

//为当前“文件”菜单添加子菜单file

SubMenu file = menu.addSubMenu("文件");

SubMenu edit = menu.addSubMenu("編輯");

SubMenu del = menu.addSubMenu("删除");

file.add(0, 1, 0, "新建");

file.add(0, 2, 0, "打开");

edit.add(1,3,0,"修改名称");

edit.add(1,4,0,"修改密码");

edit.add(1,5,0,"修改性别");

return true;

}

    

    /**

     * 覆盖该方法,响应菜单选项被单击事件

     */

    public boolean onOptionsItemSelected(MenuItem item) {

     switch (item.getItemId()) {

case 1:

setTitle("新建文件!");//改变标题,也可以通过Intent跳转到新建页面

break;

case 2:

setTitle("打开文件!");

break;

}

     return true;

    }

}

实现屏幕菜单功能,可以考虑以下步骤: 1. 创建菜单项:定义每个菜单项的名称和对应的操作。 2. 显示菜单:将所有菜单项显示在屏幕上供用户选择。 3. 用户选择:等待用户选择菜单项,并根据用户的选择执行相应的操作。 4. 返回菜单:执行完操作后,返回菜单供用户继续选择。 以下是一个简单的示例程序,演示如何在19264屏幕上实现菜单功能: ```c #include <U8glib.h> #define MENU_ITEMS 3 #define MENU_WIDTH 64 #define MENU_HEIGHT 16 U8GLIB_ST7920_192X64_1X u8g(10, 9, 8); // 定义菜单项 const char* menuItems[MENU_ITEMS] = {"Item 1", "Item 2", "Item 3"}; // 当前选择的菜单项 int selectedMenuItem = 0; void drawMenu() { u8g.firstPage(); do { // 显示菜单项 for (int i = 0; i < MENU_ITEMS; i++) { u8g.drawStr(0, MENU_HEIGHT * (i + 1), menuItems[i]); } // 显示选中项的箭头 u8g.drawTriangle(MENU_WIDTH - 10, MENU_HEIGHT * (selectedMenuItem + 1) + 4, MENU_WIDTH - 4, MENU_HEIGHT * (selectedMenuItem + 1) + 4, MENU_WIDTH - 7, MENU_HEIGHT * (selectedMenuItem + 1) + 10); } while (u8g.nextPage()); } void setup() { u8g.begin(); } void loop() { drawMenu(); // 等待用户选择 while (true) { if (digitalRead(2) == LOW) { // 按钮被按下 selectedMenuItem = (selectedMenuItem + 1) % MENU_ITEMS; delay(100); // 延时处理按键抖动 break; } } // 执行菜单项操作 switch (selectedMenuItem) { case 0: // 执行 Item 1 操作 break; case 1: // 执行 Item 2 操作 break; case 2: // 执行 Item 3 操作 break; } } ``` 在上述示例程序中,我们首先定义了三个菜单项,然后在 `drawMenu` 函数中将它们显示在屏幕上。该函数使用 `U8GLIB_ST7920_192X64_1X` 类库提供的 `drawStr` 函数绘制字符串,以及 `drawTriangle` 函数绘制选中项的箭头。在 `loop` 函数中,我们等待用户选择菜单项,并根据用户的选择执行相应的操作。在示例程序中,我们通过一个按钮来模拟用户的选择。当按钮被按下时,我们切换选中项,并在 `switch` 语句中执行相应的操作。 需要注意的是,示例程序中只考虑了单选菜单,如果需要实现多选或级联菜单,需要对程序进行适当修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值