安卓开发——浮动上下文选项与上下文菜单栏的实现
来源:互联网 发布:linux下c语言ide 编辑:程序博客网 时间:2024/05/06 04:53
上下文菜单就是在界面中,尤其是列表项等视图中长按一个条目时,会弹出一个浮动的上下文菜单选项,或者是进入列表的多选界面。
浮动的上下文选项
首先我们要在res/menu目录中添加菜单项布局文件(list_item_context.xml)。
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_fragment_crime_list_delete" android:icon="@android:drawable/ic_menu_delete" android:title="@string/list_item_delete"> </item></menu>
然后我们要实现浮动上下文选项菜单和响应相应菜单选项的处理则要重载以下两个函数:
/* 实例化一个浮动上下文菜单 */
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo);/* 处理菜单按钮点击事件 */
public boolean onContextItemSelected(MenuItem item);
具体实现如下:
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { getActivity().getMenuInflater().inflate(R.menu.list_item_context, menu); } @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.list_item_delete: /* 在这里处理相应按钮的事件 */ return true; ... default: ... } return super.onContextItemSelected(item); }
注意:默认情况下,长按视图不会触发上下文菜单的创建。要触发菜单的创建,必须调用以下
Fragment方法为浮动上下文菜单登记一个视图:registerForContextMenu(listView)。
在实际开发中推荐在Fragment的onCreateView()方法中进行注册。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreateView(inflater, container, savedInstanceState); /* 为Listview中的选项创建浮动上下文菜单 */ ListView listView = (ListView) v.findViewById(android.R.id.list); registerForContextMenu(listView); ... return v;}
上下文操作模式
1.首先我们在Fragment.onCreateView(…)方法中,设置列表视图的选择模式为CHOICE_MODE_MULTIPLE_MODAL。(适当时候要考虑版本兼容性问题)
2.然后我们要给ListView设置一个实现AbsListView.MultiChoiceModeListener接口的监听器。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = super.onCreateView(inflater, container, savedInstanceState); ListView listView = (ListView) v.findViewById(android.R.id.list); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { @Override public void onItemCheckedStateChanged(ActionMode actionMode, int i, long l, boolean b) { //暂时没有实现 } @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { /* 实例化操作栏上的菜单项,这里的布局xml可用浮动上下文菜单的菜单项 */ actionMode.getMenuInflater().inflate(R.menu.fragment_list_context_item, menu); return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { return false; //暂时没有实现 } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.fragment_list_context_button: ...处理按钮事件 return true; } return false; } @Override public void onDestroyActionMode(ActionMode actionMode) { //暂时没有实现 } }); ... return v; }
3.修改已被选中条目的显示背景。
创建一个res/drawable目录,然后以selector为根元素在该目录下新建一个名为background_activated.xml的文件。
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@android:color/darker_gray"></item></selector>
然后修改列表项条目布局文件的属性
(这里只是例子说明,主要是观察 android:background 属性的应用):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/background_activited">....</RelativeLayout>
- 安卓开发——浮动上下文选项与上下文菜单栏的实现
- 安卓开发复习笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- 安卓开发笔记——Menu菜单组件(选项菜单,上下文菜单,子菜单)
- 安卓开发:上下文菜单
- OptionMenu 和 ContextMenu (系统菜单栏——上下文菜单栏)
- 安卓开发:在Activity中使用getApplicationcontext()与this获取上下文对象的区别
- Android子菜单和选项菜单与上下文菜单的实现
- Android子菜单和选项菜单与上下文菜单的实现
- Android上下文——两种上下文的对比 getApplicationContext()与Activity.this的浅认识
- 进程上下文与中断上下文的理解
- springmvc上下文与springcontext上下文的关系
- 安卓-获取全局上下文
- 安卓菜单的使用系列3:显示上下文菜单
- php stream上下文选项
- Flex上下文菜单的实现
- ExpandableListView上下文菜单的实现
- 上下文
- 上下文
- 搜索过的问题集合(主要是Ext.js5)
- 使用UE4发布安卓平台游戏
- exit()与_exit()函数的区别
- QTableWidget 导出到表格
- BLE-NRF51822教程8-动态广播
- 安卓开发——浮动上下文选项与上下文菜单栏的实现
- 文本分析之数据收集
- 8步拥有免费QQ域名邮箱
- Gradle实现的两种简单的多渠道打包方法
- Android获取到wifi的信息
- BLE-NRF51822教程9—动态密码(配对码)
- 华为机试题:向升序单向链表中插入一个节点
- [Spring实战系列](4)Spring IOC容器
- 安卓开发——存储与加载本地文件