7 使用ContextMenu实现上下文菜单
7-1 认识ContextMenu (03:09)
长按某个视图,弹出的菜单就是ContextMenu
ContextMenu的组成:
标题以及标题图标
菜单内容
菜单内容的点击响应事件
ContextMenu与OptionMenu的区别:
OptionMenu对应的是activity,一个activity只能拥有一个选项菜单;
contextMenu对应的是view,每一个view都可以设置上下文菜单
一般情况下ContextMenu常用于ListView或者GriView;
ContextMenu创建方法
首先给View注册上下文菜单registerForContextMenu()
添加上下文菜单内容onCreateContextMenu()
可以通过代码动态添加;
可以加载XML文件中的菜单项;
设置菜单点击后响应事件onContextItemSelected()
7-2 创建ContextMenu菜单 (14:26)
一、創建一個xml文件listview
在java中初始化listview=findviebyid..
二、构造listview显示的数据
三、设置listview的显示内容
添加数据源listview.setAdapter(new Arrayadapter<String>(this,layout,Arraylist));
注册上下文菜单 this.registerForContextMenu(listview);
四、寫onCreateContextMenu方法:
添加上下文菜单内同
public void onCreateContextMenu(....){
menu.setHeaderTitle("");
menu.setHeaderIcon();
menu.add(groupid,itemid,order排序,title);
}
五、设置菜单项点击事件
onContextItemSelected(MenuItem item){
switch(item.getItemId){
case id:
XXX;
break;
}
}
动态:
package com.imooc.contextmenudemo; import java.util.ArrayList; import java.util.zip.Inflater; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showListView(); } /** * 设置listview的显示内容 */ private void showListView() { ListView listview = (ListView) findViewById(R.id.listview); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData()); listview.setAdapter(adapter); this.registerForContextMenu(listview); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); // 设置Menu显示内容 menu.setHeaderTitle("文件操作"); menu.setHeaderIcon(R.drawable.ic_launcher); menu.add(1, 1, 1, "复制"); menu.add(1, 2, 1, "粘贴"); menu.add(1, 3, 1, "剪切"); menu.add(1, 4, 1, "重命名"); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 1: Toast.makeText(MainActivity.this, "点击复制", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "点击粘贴", Toast.LENGTH_SHORT).show(); break; case 3: Toast.makeText(MainActivity.this, "点击剪切", Toast.LENGTH_SHORT).show(); break; case 4: Toast.makeText(MainActivity.this, "点击重命名", Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** * 构造listview显示的数据 * * @return */ private ArrayList<String> getData() { ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < 5; i++) { list.add("文件" + (i + 1)); } return list; } }
静态:
package com.imooc.contextmenudemo; import java.util.ArrayList; import java.util.zip.Inflater; import android.app.Activity; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showListView(); } /** * 设置listview的显示内容 */ private void showListView() { ListView listview = (ListView) findViewById(R.id.listview); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getData()); listview.setAdapter(adapter); this.registerForContextMenu(listview); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); //设置Menu显示内容 menu.setHeaderTitle("文件操作"); menu.setHeaderIcon(R.drawable.ic_launcher); // menu.add(1, 1, 1, "复制"); // menu.add(1, 2, 1, "粘贴"); // menu.add(1, 3, 1, "剪切"); // menu.add(1, 4, 1, "重命名"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.context_menu_item1: Toast.makeText(MainActivity.this, "点击复制",Toast.LENGTH_SHORT).show(); break; case R.id.context_menu_item2: Toast.makeText(MainActivity.this, "点击粘贴",Toast.LENGTH_SHORT).show(); break; case R.id.context_menu_item3: Toast.makeText(MainActivity.this, "点击剪切",Toast.LENGTH_SHORT).show(); break; case R.id.context_menu_item4: Toast.makeText(MainActivity.this, "点击重命名",Toast.LENGTH_SHORT).show(); break; } return super.onContextItemSelected(item); } /** * 构造listview显示的数据 * * @return */ private ArrayList<String> getData() { ArrayList<String> list = new ArrayList<String>(); for (int i = 0; i < 5; i++) { list.add("文件" + (i + 1)); } return list; } }
Main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/context_menu_item1" android:orderInCategory="100" android:showAsAction="never" android:title="复制"/> <item android:id="@+id/context_menu_item2" android:orderInCategory="100" android:showAsAction="never" android:title="粘贴"/> <item android:id="@+id/context_menu_item3" android:orderInCategory="100" android:showAsAction="never" android:title="剪切"/> <item android:id="@+id/context_menu_item4" android:orderInCategory="100" android:showAsAction="never" android:title="重命名"/> </menu>