Android学习笔记十九之Menu菜单.docx

上传人:b****8 文档编号:30645000 上传时间:2023-08-18 格式:DOCX 页数:16 大小:50.14KB
下载 相关 举报
Android学习笔记十九之Menu菜单.docx_第1页
第1页 / 共16页
Android学习笔记十九之Menu菜单.docx_第2页
第2页 / 共16页
Android学习笔记十九之Menu菜单.docx_第3页
第3页 / 共16页
Android学习笔记十九之Menu菜单.docx_第4页
第4页 / 共16页
Android学习笔记十九之Menu菜单.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

Android学习笔记十九之Menu菜单.docx

《Android学习笔记十九之Menu菜单.docx》由会员分享,可在线阅读,更多相关《Android学习笔记十九之Menu菜单.docx(16页珍藏版)》请在冰豆网上搜索。

Android学习笔记十九之Menu菜单.docx

Android学习笔记十九之Menu菜单

Android学习笔记十九之Menu菜单

之前我们已经学习过Android的基本UI控件和Android的五大布局LinearLayout线性布局、RelativeLayout相对布局、FrameLayout帧布局、GridLayout网格布局和TableLayout表格布局,下面我们来学习Android的其他控件,这些控件能让我们的APP更加友好和人性化。

Menu菜单

  今天我们来学习第一个友好交互控件,Menu菜单。

在AndroidOS中,Menu菜单有三种,分别是:

OptionMenu(选项菜单)、ContextMenu(上下文菜单)和SubMenu(子菜单)。

下面我们分别来介绍一下它们。

OptionMenu选项菜单

  OptionMenu是Android中最常见的菜单,通过手机上的Menu键可以唤出。

使用方法非常简单,只需要重写onCreateOptionsMenu(Menumenu)和onOptionsItemSelected(MenuItemitem)这两个方法即可,前者是OptionMenu创建的时候调用,完成初始化,只调用一次;后者是菜单项被选中是触发的事件,在这里完成Menu选项事件处理。

除了这两个方法之外,我们还可以重写OptionMenu的以下三个方法:

onOptionsMenuClosed(Menumenu)菜单关闭时候回调方法、onPrepareOptionsMenu(Menumenu)菜单显示前回调方法、onMenuOpened(intfeatureId,Menumenu)菜单打开之后回调方法。

下面我们通过一个例子说明:

Activity代码:

packagecom.example.menudemo;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.Menu;

importandroid.view.MenuItem;

importandroid.widget.TextView;

/**

*CreatedbyDevinon2016/7/4.

*/

publicclassOptionMenuActivityextendsAppCompatActivity{

privatefinalstaticintBASKETBALL=10001;

privatefinalstaticintFOOTBALL=10002;

privatefinalstaticintVOLLEYBALL=10003;

privatefinalstaticintBALLOON=10004;

privatefinalstaticintPINGPONG=10005;

privatefinalstaticintBASEBALL=10006;

privateTextViewtv_option_menu;

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_optionmenu);

tv_option_menu=(TextView)findViewById(R.id.tv_option_menu);

}

@Override

publicbooleanonCreateOptionsMenu(Menumenu){

//intgroupId,intitemId,intorder,CharSequencetitle

menu.add(1,BASKETBALL,2,"篮球");

menu.add(1,FOOTBALL,3,"足球");

menu.add(1,VOLLEYBALL,4,"排球");

menu.add(1,BALLOON,5,"气球");

menu.add(1,PINGPONG,6,"乒乓球");

menu.add(1,BASEBALL,7,"棒球");

returntrue;

}

@Override

publicbooleanonOptionsItemSelected(MenuItemitem){

switch(item.getItemId()){

caseBASKETBALL:

tv_option_menu.setText("你喜欢篮球吗?

");

break;

caseFOOTBALL:

tv_option_menu.setText("你喜欢足球吗?

");

break;

caseVOLLEYBALL:

tv_option_menu.setText("你喜欢排球吗?

");

break;

caseBALLOON:

tv_option_menu.setText("你喜欢气球吗?

");

break;

casePINGPONG:

tv_option_menu.setText("你喜欢乒乓球吗?

");

break;

caseBASEBALL:

tv_option_menu.setText("你喜欢棒球吗?

");

break;

}

returnsuper.onOptionsItemSelected(item);

}

}

实现效果图:

这里实现比较简单,就不在做很多的介绍了。

添加菜单有两种方法,可以通过定义XML文件,然后调用getMenuInflater().inflate(R.menu.menu_main,menu)加载,也可以像上面例子一样通过代码添加,即是add的方法。

ContextMenu上下文菜单

  当我们长时间按住一个View组件的时候,会弹出一个菜单,那个菜单就是ContextMenu。

使用ContextMenu需要经历如下三个步骤:

第一步是重写onCreateContextMenu(ContextMenumenu,Viewview,ContextMenuInfomenuInfo)方法,第二步是为view组件注册上下文菜单,即是调用registerForContextMenu(View)方法,第三步是给菜单项指定事件监听器,即是重写onContextItemSelected(MenuItemitem)方法,下面我们用一个例子说明一下:

  上面我们已经实现了用代码加载菜单项,现在我们采用XML文件来加载菜单项,这样修改的时候只需要修改XML文件即可,也减轻了Java代码的臃肿。

Activity代码:

packagecom.example.menudemo;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.ContextMenu;

importandroid.view.MenuInflater;

importandroid.view.MenuItem;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.Toast;

/**

*CreatedbyDevinon2016/7/4.

*/

publicclassContextMenuActivityextendsAppCompatActivity{

privateButtonbtn_show_context_menu;

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_contextmenu);

btn_show_context_menu=(Button)findViewById(R.id.btn_show_context_menu);

registerForContextMenu(btn_show_context_menu);

}

@Override

publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo){

MenuInflatermenuInflater=newMenuInflater(this);

menuInflater.inflate(R.menu.context_menu,menu);

super.onCreateContextMenu(menu,v,menuInfo);

}

@Override

publicbooleanonContextItemSelected(MenuItemitem){

switch(item.getItemId()){

caseR.id.basketball:

Toast.makeText(getApplicationContext(),"你选择了篮球",Toast.LENGTH_SHORT).show();

break;

caseR.id.football:

Toast.makeText(getApplicationContext(),"你选择了足球",Toast.LENGTH_SHORT).show();

break;

caseR.id.baseball:

Toast.makeText(getApplicationContext(),"你选择了棒球",Toast.LENGTH_SHORT).show();

break;

caseR.id.pingpang:

Toast.makeText(getApplicationContext(),"你选择了乒乓球",Toast.LENGTH_SHORT).show();

Bak;

caseR.id.balloon:

Toast.makeText(getApplicationContext(),"你选择了汽球",Toast.LENGTH_SHORT).show();

break;

}

returnsuper.onContextItemSelected(item);

}

}

menu中XML代码:

xmlversion="1.0"encoding="utf-8"?

>

android:

id="@+id/context_menu_item"

android:

checkableBehavior="none">

android:

id="@+id/basketball"

android:

title="篮球"/>

android:

id="@+id/football"

android:

title="足球"/>

android:

id="@+id/baseball"

android:

title="棒球"/>

android:

id="@+id/pingpang"

android:

title="乒乓球"/>

android:

id="@+id/balloon"

android:

title="汽球"/>

实现的效果图:

布局文件比较简单,就不在贴出代码了。

其中,需要在res目录下新建一个文件夹menu。

SubMenu子菜单

  子菜单相当于在菜单的item中又嵌套一层菜单。

就不多介绍了,下面我们直接实现一个例子:

Activity代码:

packagecom.example.menudemo;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.support.v7.app.AppCompatActivity;

importandroid.view.ContextMenu;

importandroid.view.MenuInflater;

importandroid.view.MenuItem;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.TextView;

/**

*CreatedbyDevinon2016/7/4.

*/

publicclassSubMenuActivityextendsAppCompatActivity{

privateButtonbtn_show_sub_menu;

privateTextViewtv_show_sub;

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_submenu);

btn_show_sub_menu=(Bton)findViewById(R.id.btn_show_sub_menu);

registerForContextMenu(btn_show_sub_menu);

tv_show_sub=(TextView)findViewById(R.id.tv_show_sub);

}

@Override

publicvoidonCreateContextMenu(ContextMenumenu,Viewv,ContextMenu.ContextMenuInfomenuInfo){

MenuInflatermenuInflater=newMenuInflater(this);

menuInflater.inflate(R.menu.sub_menu,menu);

super.onCreateContextMenu(menu,v,menuInfo);

}

@Override

publicbooleanonContextItemSelected(MenuItemitem){

switch(item.getItemId()){

caseR.id.app:

tv_show_sub.setText("你选择的是水果类的苹果");

break;

caseR.id.pear:

tv_show_sub.setText("你选择的是水果类的雪梨");

break;

caseR.id.grape:

tv_show_sub.setText("你选择的是水果类的葡萄");

break;

caseR.id.sub_basketball:

tv_show_sub.setText("你选择的是球类的篮球");

break;

caseR.id.sub_football:

tv_show_sub.setText("你选择的是球类的足球");

break;

caseR.id.sub_balloon:

tv_show_sub.setText("你选择的是球类的汽球");

break;

caseR.id.java:

tv_show_sub.setText("你选择的是语言类的Java");

break;

caseR.id.Swift:

tv_show_sub.setText("你选择的是语言类的swift");

break;

caseR.id.php:

tv_show_sub.setText("你选择的是语言类的PHP");

break;

}

returnsuper.onContextItemSelected(item);

}

}

menu的XML文件代码:

xmlversion="1.0"encoding="utf-8"?

>

android="

checkableBehavior="none">

android:

id="@+id/fruit"

android:

title="水果">

checkableBehavior="none">

android:

id="@+id/app"

android:

title="苹果"/>

android:

id="@+id/pear"

android:

title="雪梨"/>

android:

id="@+id/grape"

android:

title="葡萄"/>

android:

id="@+id/ball"

android:

title="球类">

checkableBehavior="none">

android:

id="@+id/sub_basketball"

android:

title="篮球"/>

android:

id="@+id/sub_football"

android:

title="足球"/>

android:

id="@+id/sub_balloon"

android:

title="气球"/>

android:

id="@+id/language"

android:

title="语言">

checkableBehavior="none">

android:

id="@+id/java"

android:

title="JAVA"/>

android:

id="@+id/Swift"

android:

title="Swift"/>

android:

id="@+id/php"

android:

title="PHP"/>

实现的效果图:

这里实现的是非常简单的,更加复杂就按需要实现。

最后还介绍一个PopupMenu(弹出式菜单),直接实现一个小例子

java代码:

btn_popup_menu=(Button)findViewById(R.id.btn_popup_menu);

btn_popup_menu.setOnClickListener(newView.OnClickListener(){

@Override

publicvoidonClick(Viewview){

PopupMenupopupMenu=newPopupMenu(MainActivity.this,btn_option_menu);

popupMenu.getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu());

popupMenu.setOnMenuItemClickListener(newPopupMenu.OnMenuItemClickListener(){

@Override

publicbooleanonMenuItemClick(MenuItemitem){

switch(item.getItemId()){

caseR.id.popup_java:

Toast.makeText(MainActivity.this,"你选择了JAVA语言",Toast.LENGTH_SHORT).show();

break;

caseR.id.popup_Swift:

Toast.makeText(MainActivity.this,"你选择了Swift语言",Toast.LENGTH_SHORT).show();

break;

caseR.id.popup_php:

Toast.makeText(MainActivity.this,"你选择了PHP语言",Toast.LENGTH_SHORT).show();

break;

}

returntrue;

}

});

popupMenu.show();

}

});

menu的XML文件代码:

xmlversion="1.0"encoding="utf-8"?

>

android="

checkableBehavior="none">

android:

id="@+id/popup_java"

android:

title="JAVA"/>

android:

id="@+id/popup_Swift"

android:

title="Swift"/>

android:

id="@+id/popup_php"

android:

title="PHP"/>

实现的效果图:

到这里就基本介绍完了Menu的基本知识,我们可以使用menu实现很多的功能。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1