简单的 Android 菜单

时间:2022-08-29 10:17:38

Android 创建简单的菜单

一:上下文菜单:

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

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

简单的  Android 菜单

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

  进入Text下编写代码

简单的  Android 菜单

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

<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菜单&lpar;menu&rpar;

    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. MySQL 笔记2

    -- *************一.数据约束********************---- -- 1.1 默认值 CREATE TABLE student( id INT, NAME ), addr ...

  2. AutoVue ISDK学习总结(一)

    这段时间,断断续续花了2,3周时间,研究AutoVue ISDK.貌似这个东西用的人很少,网上只搜到了一篇中文文档.自己英文水平差,Java水平也差,看Oracle官网文档,进展非常慢.到现在,终于对 ...

  3. 使用clone&lpar; &rpar;和Cloneable接口

    由Object类定义的绝大部分方法在本书其他部分讨论.而一个特别值得关注的方法是clone( ).clone( )方法创建调用它的对象的一个复制副本.只有那些实现Cloneable接口的类能被复制. ...

  4. poj1274 二分匹配

    今天复习二分匹配,A 了一道模板题. 二分匹配需要理解增广路的寻找.用dfs来更新最大匹配.注意一些点:赋初值:愚蠢地把==写成了= ; 然后match的记值;每个点都要重新走一遍. #include ...

  5. Section 1&period;4 Packing Rectangles

    本来是USACO Training的1.4.1的,但是介于今早过了食物链想起了这道题实在是太怨念了,翻出自己写的AC程序居然有5KB!! 思路很简单,枚举,而且就图中的六种情况.但是第六种变化状况太多 ...

  6. JS初学之-js的a&colon;hover

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  7. 关于Oralce数据库优化的几点总结

    个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品本 ...

  8. Learning Cocos2d-x for WP8(9)——Sprite到哪,我做主

    原文:Learning Cocos2d-x for WP8(9)--Sprite到哪,我做主 工程文件TouchesTest.h和TouchesTest.cpp 相关素材文件 事件驱动同样适用于coc ...

  9. Oracle01——基本查询、过滤和排序、单行函数、多行函数和多表查询

    作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7272236.html Oracle的集群 Oracle的体系结构 SQL> --当 ...

  10. vue 的进度条组件

    先看效果: 要想实现如上图的,进度跳效果,有两种方式,首先介绍第一种: 1.自己用 div 写一个,代码如下 <template> <div class="mfc-slid ...