本文实例为大家分享了Android学习之菜单使用的具体代码,供大家参考,具体内容如下
Android中菜单包含上下文菜单和选项菜单两种类型。
使用统一的菜单类来管理菜单:
Menu、MenuItem、SubMenu三个类。
1.Menu类:
一个Menu对象代表一个菜单,是整个菜单的基础。
Menu类的常用方法:添加一个菜单:add(int groupId, int itemId, int order, CharSequence title)
2.MenuItem类:
MenuItem代表一个菜单项;
MenuItem往往是通过Menu的add方法来获取的。
3.subMenu类:
subMenu继承自Menu,其代表一个子菜单。
Menu、MenuItem、SubMenu的使用:
Menu通过add方法,来添加菜单项MenuItem并返回;
Menu通过addSubMenu方法,来添加自菜单SubMenu并返回;
通过MenuItem的多个方法,来设定菜单项的状态;
SubMenu继承自Menu,用相同方法,添加MenuItem及SubMenu;
通过SubMenu的多个方法,设定SubMenu的状态。
1.ContextMenu(上下文菜单):
ContextMenu(上下文菜单)类似于PC中的右键弹出菜单,当一个视图注册了上下文菜单时,长按该视图对象将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,最常见的是用于列表视图ListView中,但上下文菜单不支持图标和快捷键。
使用步骤如下:
(1)在Activity中使用上下文菜单,复写onCreateContextMenu() 和 onContextItemSelected()方法;
(2)为视图控件View中注册上下文菜单,使用registerForContextMenu()方法;
(3)在onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)中添加菜单项menu.add();
(4)在onContextItemSelected()中通过设置菜单的id来实现菜单子项的监听。
ContextMenu在Activity中的回调函数:
onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)
//初始化,第一次调用菜单时执行,用于创建菜单项目
onContextItemSelected(MenuItem item)
//菜单项被选中后调用,用于处理菜单事件,根据传递的item参数,确定具体的菜单项,进行设计
onContextMenuClosed(Menu menu) //菜单被关闭时调用
``
2.OptionsMenu(选项菜单):
使用步骤如下:
(1)在Activity中复写onCreateOptionsMenu()和onOptionsItemSelected()方法;
(2)在onCreateOptionsMenu(Menu menu)中添加菜单选项,有两种方式:
a、调用menu.add()
b、从布局文件中添加,在res下新建menu文件夹,创建menu文件,填写相应的选项;
(2)为视图控件View中注册上下文菜单,使用registerForContextMenu()方法;
OptionsMenu选项菜单在Activity中的回调方法:
onCreateOptionsMenu(Menu menu)
//初始化选项菜单,初次显示菜单时调用
public boolean onOptionsItemSeleted(MenuItem item)
//选项菜单中的某个选项被选中时,调用该方法
public void onOptionMenuClosed(Menu menu)
//当关闭菜单时调用该方法
☆☆☆Android Studio实现使用菜单的使用
1.打开Android Studio,新建工程后,在activity_main.xml中,编写代码。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.androidlesson.MainActivity"
android:background="@android:color/holo_blue_dark">
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/textView"
android:background="@android:color/holo_green_dark"
android:textSize="36sp" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:srcCompat="@mipmap/ic_launcher"
android:id="@+id/imageView"
android:background="@android:color/holo_purple"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:layout_marginTop="14dp" />
</RelativeLayout>
2.在MainActivity.java中,编写相关代码。
package com.example.menu;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView tv;
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (TextView) findViewById(R.id.textView);
iv= (ImageView) findViewById(R.id.imageView);
registerForContextMenu(tv);
registerForContextMenu(iv);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (v.getId()==tv.getId()) {
//menu.add(0,0,0,"打开");
menu.add(0, 0, 0, "大号字体");
//menu.add(0,1,1,"保存");
menu.add(0, 1, 1, "小号字体");
//SubMenu sm1=menu.addSubMenu(0,2,2,"编辑");
SubMenu sm1 = menu.addSubMenu(0, 2, 2, "颜色");
//sm1.add(0,3,3,"复制");
//sm1.add(0,4,4,"粘贴");
sm1.add(0, 3, 3, "黑色");
sm1.add(0, 4, 4, "红色");
}else {
menu.add(1,5,5,"图片信息");
menu.add(1,6,6,"图片说明");
}
super.onCreateContextMenu(menu, v, menuInfo);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
case 0:
tv.setTextSize(32);
break;
case 1:
tv.setTextSize(16);
break;
case 3:
tv.setTextColor(Color.BLACK);
break;
case 4:
tv.setTextColor(Color.RED);
break;
case 5:
Toast.makeText(this,"png格式图片,分辨率64",Toast.LENGTH_LONG).show();
break;
case 6:
Toast.makeText(this,"这是安卓机器人的图片",Toast.LENGTH_LONG).show();
}
return super.onContextItemSelected(item);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu sub1=menu.addSubMenu(0,0,0,"文件");
SubMenu sub2=menu.addSubMenu(0,1,1,"编辑");
sub1.add(0,2,2,"打开");
sub1.add(0,3,3,"保存");
sub1.add(0,4,4,"另存为");
sub2.add(0,5,5,"复制");
sub2.add(0,6,6,"粘贴");
menu.add(0,7,7,"退出");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case 2:
break;
case 3:
break;
case 4:
break;
case 7:
finish();
}
return super.onOptionsItemSelected(item);
}
}
运行结果:
这就是菜单的简单使用。