Android中Option menu和Context menu的使用(十六)
2015-11-19 10:06
671 查看
Menu由两种形式,Option menu和Context menu。前者是按下设备的Menu硬按钮弹出,后者是长按widget弹出。
1、Option Menu:当我们按下Menu的硬件按钮时,Option Menu将被触发显示,最多可以显示6个选项的icon菜单,
如果选项多于6个,第6个选项显示为“More“,点击可以进入扩展菜单。
步骤1:创建Menu
步骤2:Menu触发比较简单,Activity在Memu后会触发onOptionsItemSelected()进行处理。
步骤3:每次显示menu时根据实际的情况进行适配
步骤4:子菜单,Android支持二级菜单,但是不支持三级等多级菜单。子菜单设置如下,在onCreateOptionsMenu(),
2、Context Menu:Context Menu是用户手指长按某个View触发的菜单。
步骤1:为某个view注册ContextMenu,例如在我们的例子中,在onCreate()中对整个ListView进行处理:
步骤2:创建ContextMenu,通过Override onCreateContextMenu()来创建Context Menu。
步骤3:点击菜单触发函数,触发onContextItemSelected()。
代码片段:
package com.itarchy.menu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* @author:itarchy
* @E-mail:itarchy@163.com
* @data:2015-11-19上午10:26:37
* @version:
* @Des:
*/
public class HomeActivity extends Activity {
private Button btn_op;
private Button btn_Ct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_op = (Button) this.findViewById(R.id.btn_op);
btn_op.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this,
OptionMenuActivity.class));
}
});
btn_Ct = (Button) this.findViewById(R.id.btn_ct);
btn_Ct.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this,
ContextMenuActivity.class));
}
});
}
}
1、Option Menu:当我们按下Menu的硬件按钮时,Option Menu将被触发显示,最多可以显示6个选项的icon菜单,
如果选项多于6个,第6个选项显示为“More“,点击可以进入扩展菜单。
步骤1:创建Menu
步骤2:Menu触发比较简单,Activity在Memu后会触发onOptionsItemSelected()进行处理。
步骤3:每次显示menu时根据实际的情况进行适配
步骤4:子菜单,Android支持二级菜单,但是不支持三级等多级菜单。子菜单设置如下,在onCreateOptionsMenu(),
2、Context Menu:Context Menu是用户手指长按某个View触发的菜单。
步骤1:为某个view注册ContextMenu,例如在我们的例子中,在onCreate()中对整个ListView进行处理:
步骤2:创建ContextMenu,通过Override onCreateContextMenu()来创建Context Menu。
步骤3:点击菜单触发函数,触发onContextItemSelected()。
代码片段:
package com.itarchy.menu;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
*
* @author:itarchy
* @E-mail:itarchy@163.com
* @data:2015-11-19上午10:26:37
* @version:
* @Des:
*/
public class HomeActivity extends Activity {
private Button btn_op;
private Button btn_Ct;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn_op = (Button) this.findViewById(R.id.btn_op);
btn_op.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this,
OptionMenuActivity.class));
}
});
btn_Ct = (Button) this.findViewById(R.id.btn_ct);
btn_Ct.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this,
ContextMenuActivity.class));
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".OptionMenuActivity" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="菜单" android:textSize="30sp" /> <Button android:id="@+id/btn_op" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/title" android:text="选项菜单和子菜单" android:textSize="20sp" /> <Button android:id="@+id/btn_ct" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/btn_op" android:text="上下文菜单" android:textSize="20sp" /> </RelativeLayout>
package com.itarchy.menu; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.widget.Toast; public class OptionMenuActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.op_main); } // 创建选菜单 @Override public boolean onCreateOptionsMenu(Menu menu) { // 1、方式一、通过一个MenuInflater把在XML布局文件中定义好的菜单样式应用在菜单上 /* getMenuInflater().inflate(R.menu.main, menu); */ // 2、方式二: // 直接在Java代码中使用add()方法逐个添加菜单项 menu.add(Menu.NONE, 0, Menu.NONE, "设置").setIcon(R.drawable.qq); menu.add(Menu.NONE, 1, Menu.NONE, "添加").setIcon(R.drawable.qq_kong); // 给第三项添加子菜单 SubMenu subMenu = menu.addSubMenu(Menu.NONE, 2, Menu.NONE, "子菜单1") .setIcon(R.drawable.qq); subMenu.setHeaderIcon(R.drawable.qq_kong); subMenu.setHeaderTitle("子菜单标题"); subMenu.add(Menu.NONE, 112, Menu.NONE, "子菜单1"); subMenu.add(Menu.NONE, 113, Menu.NONE, "子菜单2"); subMenu.add(Menu.NONE, 114, Menu.NONE, "子菜单3"); subMenu.add(Menu.NONE, 115, Menu.NONE, "子菜单4"); menu.add(Menu.NONE, 3, Menu.NONE, "图库").setIcon(R.drawable.qq); menu.add(Menu.NONE, 4, Menu.NONE, "相机").setIcon(R.drawable.qq_kong); menu.add(Menu.NONE, 5, Menu.NONE, "音乐").setIcon(R.drawable.qq); menu.add(Menu.NONE, 6, Menu.NONE, "蓝牙").setIcon(R.drawable.qq_kong); menu.add(Menu.NONE, 7, Menu.NONE, "个人中心"); return true; } // 点击菜单的items时执行 @Override public boolean onOptionsItemSelected(MenuItem item) { Toast.makeText(getApplication(), item.getTitle() + "," + (item.getItemId() + ""), 100).show(); switch (item.getItemId()) { case 0: // 处理"设置" break; case 1: // 处理"添加" break; } return super.onOptionsItemSelected(item); } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".OptionMenuActivity" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="30sp" android:text="选项菜单和子菜单" /> </RelativeLayout>
package com.itarchy.menu; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class ContextMenuActivity extends Activity { private TextView tvMenu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ct_main); tvMenu = (TextView) this.findViewById(R.id.title); this.registerForContextMenu(tvMenu); } // 创建上下文菜单 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(Menu.NONE, 0, Menu.NONE, "设置").setIcon(R.drawable.qq); menu.add(Menu.NONE, 1, Menu.NONE, "添加").setIcon(R.drawable.qq_kong); // 给第三项添加子菜单 SubMenu subMenu = menu.addSubMenu(Menu.NONE, 2, Menu.NONE, "子菜单1") .setIcon(R.drawable.qq); subMenu.setHeaderIcon(R.drawable.qq_kong); subMenu.setHeaderTitle("子菜单标题"); subMenu.add(Menu.NONE, 112, Menu.NONE, "子菜单1"); subMenu.add(Menu.NONE, 113, Menu.NONE, "子菜单2"); subMenu.add(Menu.NONE, 114, Menu.NONE, "子菜单3"); subMenu.add(Menu.NONE, 115, Menu.NONE, "子菜单4"); menu.add(Menu.NONE, 3, Menu.NONE, "图库").setIcon(R.drawable.qq); menu.add(Menu.NONE, 4, Menu.NONE, "相机").setIcon(R.drawable.qq_kong); menu.add(Menu.NONE, 5, Menu.NONE, "音乐").setIcon(R.drawable.qq); menu.add(Menu.NONE, 6, Menu.NONE, "蓝牙").setIcon(R.drawable.qq_kong); menu.add(Menu.NONE, 7, Menu.NONE, "个人中心"); super.onCreateContextMenu(menu, v, menuInfo); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub Toast.makeText(getApplication(), item.getTitle() + "," + (item.getItemId() + ""), 100).show(); switch (item.getItemId()) { case 0: // 处理"设置" break; case 1: // 处理"添加" break; } return super.onContextItemSelected(item); } }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".OptionMenuActivity" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textSize="30sp" android:text="上下文菜单" /> </RelativeLayout>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itarchy.menu" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.itarchy.menu.HomeActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.itarchy.menu.OptionMenuActivity" /> <activity android:name="com.itarchy.menu.ContextMenuActivity" /> </application> </manifest>
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories