Android 创建简单的菜单

一:上下文菜单:

1.在 res 下创建菜单项资源文夹 menu

  app->右击res->new->android resourse directory->resourse type->menu

2.编写xml代码(菜单代码)

  进入Text下编写代码

  代码(随便的一段代码):

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.a82037.cx06.CTENUActivity">
<group android:checkableBehavior="single">
<item android:id="@+id/apple"
android:title="苹果"/>
<item android:id="@+id/banana"
android:title="香蕉"/>
<item android:id="@+id/pear"
android:title="梨"/>
<item android:id="@+id/pitch"
android:title="桃子"/>
</group> </menu>

一段菜单代码

  对应的Java代码:

package com.example.a82037.cx06;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView; public class CTENUActivity extends Activity {
TextView tv1;
Button bt1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ctenu); tv1=findViewById(R.id.tv1);
bt1=findViewById(R.id.bt1);
registerForContextMenu(bt1);
}
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo){
getMenuInflater().inflate(R.menu.ctmenu,menu);
}
public boolean onContextItemSelected(MenuItem item){
int id=item.getItemId();
if(id==R.id.apple){
tv1.setText("您选择了苹果");
return true;
}else if(id==R.id.banana){
tv1.setText("您选择了香蕉");
return true;
}else if(id==R.id.pear){
tv1.setText("您选择了梨");
return true;
}else if(id==R.id.pitch){
tv1.setText("您选择了桃子");
return true;
}
return super.onContextItemSelected(item);
}
}

对应的Java代码

3.说明:

  我用了一个TextView来显示内容;按钮来实现长按出现菜单(这个按钮可以是其他东西,比如TextView,然后在里面加点字,就实现了长按文字出现菜单);

二:功能菜单及其子菜单:

代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.a82037.cx06.OPMENUActivity">
<item android:id="@+id/deptmenu1"
android:title="计算机系">
<menu>
<item android:id="@+id/mojormenu1"
android:title="计算机应用"/>
<item android:id="@+id/mojrmwnu2"
android:title="软件技术"/>
</menu>
</item>
<item android:id="@+id/deptmenu2"
android:title="电子商务"/>
<item
android:id="@+id/deptmenu3"
android:title="信息管理" />
</menu>

菜单代码2

package com.example.a82037.cx06;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; public class OPMENUActivity extends Activity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_opmenu); tv1=findViewById(R.id.tv1);
}
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.opmenu,menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
int id=item.getItemId();
if(id==R.id.mojormenu1){
tv1.setText("您选择了计算机系计算机应用专业");
return true;
}else if(id==R.id.mojrmwnu2){
tv1.setText("您选择了计算机系软件技术专业");
return true;
}
return super.onOptionsItemSelected(item);
}
}

对应的Java代码2

这个目录是点击菜单(传统安卓三大金刚键的最左边那个)就会有的,TextView来显示所选内容;

三:动态菜单:

代码:动态菜单,内容都在java代码里写,所以xml就很简单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.a82037.cx06.OPMENUActivity"> </menu>

菜单代码3

package com.example.a82037.cx06;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; public class POPActivity extends Activity {
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pop); tv1=findViewById(R.id.tv1);
}
public boolean onPrepareOptionsMenu(Menu menu){
String currentext=tv1.getText().toString();
if("软件技术".equals(currentext)){
menu.clear();
menu.add(0,501,1,"软件1班");
menu.add(0,502,2,"软件2班");
menu.add(0,503,3,"软件3班");
menu.add(0,504,4,"转到计算机应用菜单");
}
if("计算机应用".equals(currentext)){
menu.clear();
menu.add(0,601,1,"计应1班");
menu.add(0,602,2,"计应2班");
menu.add(0,603,3,"转到软件技术菜单");
}
return super.onPrepareOptionsMenu(menu);
}
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.po,menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item){
int id=item.getItemId();
if(id==504){
tv1.setText("计算机应用");
return true;
}else if(id==603){
tv1.setText("软件技术");
return true;
}
return super.onOptionsItemSelected(item);
}
}

对应java代码3

四:一些小东西:

1.    菜单
(1) 使用xml定义Menu
在Android工程目录下的res包下,右键选择New菜单项下的Android resource directory,并以menu命名文件夹的名字;右键menu文件夹,选择Menu resource file选项,创建main_menu.xml文件,菜单资源文件就创建在res/menu目录中。
菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。
<menu>标签没有任何属性,但可以嵌套在<item>标签中,表示子菜单的形式。不过<item>标签中不能再嵌入<item>标签。
(2)<item>标签的属性含义如下:
Id:表示菜单项的资源ID
menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。
orderInCategor:同种类菜单的排列顺序。该属性需要设置一个整数值。例如
menuCategory属性值都为system的3个菜单项(item1、item2和item3)。将这3个菜单项的orderInCategory属性值设为3、2、1,那么item3会显示在最前面,而item1会显示在最后面。
title:菜单项标题(菜单项显示的文本)
titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值
icon:菜单项图标资源ID
alphabeticShortcut:菜单项的字母快捷键
numericShortcut:菜单项的数字快捷键
checkable:表示菜单项是否带复选框。该属性可设计为true或false
checked:如果菜单项带复选框(checkable属性为true),该属性表示复选框默认状态是否被选中。可设置的值为true或false
visible:菜单项默认状态是否可视
enable:菜单项默认状态是否被激活
(3)<group>标签的属性含义如下:
id:表示菜单组的ID
menuCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
orderInCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
checkableBehavior:设置该组所有菜单项上显示的选择组件(CheckBox或Radio Button)。如果将该属性值设为all,显示CheckBox组件;如果设为single,显示Radio Button组件;如果设为none,显示正常的菜单项(不显示任何选择组件)。all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
visible:表示当前组中所有菜单项是否显示。该属性可设置的值是true或false
enable:表示当前组中所有菜单项是否被激活。该属性可设置的值是true或false 2. 功能菜单
options menu 按Menu键就会显示,用于当前的Activity。
它包括两种菜单项:
因为options menu在屏幕底部最多只能显示6个菜单项,这些菜单项称为icon menu,icon menu只支持文字(title) 以及icon,可以设置快捷键,不支持checkbox以及radio控件,所以不能设置checkable选项。
而多于6的菜单项会以“more” icon menu来调出,称为expanded menu。它不支持icon,其他的特性都和icon menu一样!
在Activity里面,一般通过以下函数来使用options menu:
Activity::onCreateOptionsMenu (Menu menu) 创建options menu,这个函数只会在menu第一次显示时调用。
Activity::onPrepareOptionsMenu (Menu menu) 更新改变options menu的内容,这个函数会在menu每次显示时调用。
Activity::onOptionsItemSelected (MenuItem item) 处理选中的菜单项。 3. 上下文菜单
context menu 要在相应的view上按几秒后才显示的,用于view,跟某个具体的view绑定在一起。这类型的菜单不支持icon和快捷键!
在Activity里面,一般通过以下函数来使用context menu:
Activity::registerForContextMenu(View view) 为某个view注册context menu,一般在Activity::onCreate里面调用。
Activity::onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) 创建context menu,和options menu不同,context meun每次显示时都会调用这个函数。
Activity::onContextItemSelected(MenuItem item) 处理选中的菜单项。 4. 子菜单 以上两种menu(功能菜单和上下文菜单)都可以加入子菜单,但子菜单不能嵌套子菜单,这意味着在Android系统,菜单只有两层,设计时需要注意的!同时子菜单不支持icon(图标)。 5. 动态菜单
动态菜单就是根据不同的界面有不同的菜单。这时候就不再直接在xml里先定义好了,要在代码中动态添加菜单项。
在android中创建菜单menu时需要重写Activity的onCreateOptionsMenu(Menumenu)方法,在这个方法中实现菜单xml的关联。这个方法只在第一次创建的时候调用一次,所以如果之后想对menu进行动态的修改,那么就不能用它了。这时,就要用到onPrepareOptionsMenu(Menumenu)方法。
onPrepareOptionsMenu与onCreateOptionsMenu不同的是,他在每次按下menu硬键之前会被调用,所以可以在这里动态的改变menu。
代码中添加菜单项的方法:menu.add(groupId, itemId, order, title)
groupld 这个菜单的组别
itemid 是用来获取这个指定菜单项的
order就是这个组别的第几项,0为第一项
title是显示的标题

这个不是代码!

我自己的一些感悟:{

  一级菜单:(用html形式类似一下)

    <menu>

      <item>计算机系</item>

      <item>艺术与设计系</item>

    </menu>

  二级菜单:(用html形式类似一下)

    <menu>

      <item>计算机系

        <menu>

          <item>软件技术专业</item>

          <item>电子商务专业</item>

        </menu>

      </item>

      <item>艺术与设计系</item>

    </menu>

}{

  实现菜单的三个方法

  

//初始化菜单     必须要
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.po,menu);
return true;
} //添加、更改 菜单 可以不要
public boolean onPrepareOptionsMenu(Menu menu){
String currentext=tv1.getText().toString();
if("软件技术".equals(currentext)){
menu.clear(); //清空菜单
menu.add(0,501,1,"软件1班");
menu.add(0,502,2,"软件2班");
menu.add(0,503,3,"软件3班");
menu.add(0,504,4,"转到计算机应用菜单");
}
if("计算机应用".equals(currentext)){
menu.clear();
menu.add(0,601,1,"计应1班");
menu.add(0,602,2,"计应2班");
menu.add(0,603,3,"转到软件技术菜单");
}
return super.onPrepareOptionsMenu(menu);
} //选择菜单后的动作并关闭菜单 必须要
public boolean onOptionsItemSelected(MenuItem item){
int id=item.getItemId();
if(id==504){
tv1.setText("计算机应用");
return true;
}else if(id==603){
tv1.setText("软件技术");
return true;
}
return super.onOptionsItemSelected(item);
}
}

关于 菜单代码3的一些注释

  里面menu.add(int,int,int,String);参数的意思

    第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。必须有,但像菜单代码3一样,可以一样。
    第二个int类型的item ID参数,代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。这个必须有且每个item的ID不能相同。
    第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。
    第四个String类型的title参数,表示选项中显示的文字。

}{

敲完xml代码后,可以转到可视化界面看看,对应一下代码,可以很快就知道怎样可视化编辑菜单。

}

简单的 Android 菜单的更多相关文章

  1. android复习第一天-----简单的android常识

    前言:要去面试了,这些天花一些事件把android中简单的知识点来串联的复习一下 1,android中的工程结构 src文件夹:存储android文件的源代码 gen文件夹:有工具自动生成,不要去修改 ...

  2. Android菜单详解(一)——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

  3. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  4. 简单的dialog菜单

    本文介绍的是我自己做的一个简单的dialog菜单,可以直接植入到类中. 方法代码: /** 显示一个靠右上的dialog列表菜单*/private void showTopBarRightButton ...

  5. Android菜单

    Android菜单概述 菜单是Activity的一个重要组成部分,它为用户操作提供了快捷的途径.Android提供了一个简单的框架来向程序中添加标准菜单 . 一.创建一个菜单资源 你需要在一个XML ...

  6. Android菜单(menu)

    Android  菜单 我们继续来进行学习,今天写一下在软件中用的还算较多的菜单. 1.Menu 菜单,很显然,作用就是点击不同的选项触发不同的方法.现在在安卓使用中推荐使用ActionBar,但这里 ...

  7. jQuery简单的手风琴菜单

    查看效果:http://keleyi.com/keleyi/phtml/menu/5.htm 本菜单的HTML代码和JS代码都简洁,完整源代码: <!DOCTYPE html PUBLIC &q ...

  8. 一款非常简单的android音乐播放器源码分享给大家

    一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...

  9. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

随机推荐

  1. Http Status Code 套餐合集(转载)

    1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 100(继续)请求者应当继续提出请求. 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分. 101(切换协议)请求者已要 ...

  2. System.out.println与System.err.println的区别

    public class Test2 { static { System.out.println("1"); } { System.out.println("2" ...

  3. webpack+vue2实现旅游网小demo

    这两天自己练习做了一个webpack+vue2的旅游app小项目,涉及到的内容是vue组件.vue路由以及webpack打包.         目录文件设计: 有兴趣的可到我的百度网盘下载 链接: h ...

  4. LintCode2016年算法比赛----二叉树的所有路径

    二叉树的所有路径 题目描述 给定一棵二叉树,找从根节点到叶子节点的所有路径 样例 给出下面这课二叉树: 1 / \ 2 3 \ 5 所有根到叶子的路径为: [ "1->2->5& ...

  5. Unity射线

    //射线原点 [SerializField] Transform tr; //射线长度    [SerializField] float dis = 5; //射线停留时间 [SerializFiel ...

  6. 软工读书笔记 week 1

    这次读书笔记主要是就<程序员修炼之道>这本书的前半部分做一些总结以及发表一些自己的看法. 本书前面的一部分主要是一些程序员应该在工作中时刻注意的事情,一些关键的信息如下: 1.处理问题的态 ...

  7. Python学习---基于JQuery的Ajax实现[快捷+底层$.ajax]

    快捷API <1>$.get(url, [data], [callback], [type]) <2>$.post(url, [data], [callback], [type ...

  8. Win10笔记本显卡驱动更新升级

    对于游戏玩家来说,对显卡的关注度要高于电脑其它硬件,一般来说,显卡越好,游戏性能往往越强.不过要持续发挥显卡的最佳游戏性能,经常更新显卡驱动也是很有必要的.那么笔记本显卡驱动怎么更新?下面小编以自己的 ...

  9. December 19th 2016 Week 52nd Sunday

    Truth and roses have thorns about them. 真理和玫瑰,身边都有刺. Either truth or roses, they all have thorns aro ...

  10. ubuntu 14.04 安装boost 1.53

    安装依赖 $ sudo apt-get install mpi-default-dev $ sudo apt-get install libicu-dev $ sudo apt-get install ...