- 浏览: 434771 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
Menu 改头换面 扩展如下:
1. 图标化文字
2. 快捷键功能 具体 参考xp - 菜单
[代码 步骤]
1. 定制化IconifiedTextItem 用于存放菜单选项需要的 图标资源 文字 快捷键
public class IconifiedTextItem { String text; Drawable icon; String shortcut; public IconifiedTextItem(String s,Drawable d,String ss){ text = s; icon = d; shortcut = ss; } public String getText(){ return text; } public Drawable getIcon(){ return icon; } public String getShortcut(){ return shortcut; } }
2. 定义IconifiedTextAdapter 不仅用于存放具体菜单数据 即:图标 文字 快捷键 也定义菜单布局方式 故 extends BaseAdapter
public class IconifiedTextAdapter extends BaseAdapter { Context context; //存放菜单属性 List<IconifiedTextItem> itemList; public IconifiedTextAdapter(Context c){ context = c; itemList = new ArrayList<IconifiedTextItem>(); } //添加一列菜单 包括:文字 图标 快捷键 public void addItem(String string,int res,String shortcut){ IconifiedTextItem it = new IconifiedTextItem(string,context.getResources().getDrawable(res),shortcut); itemList.add(it); } //根据快捷键名字 得出其索引值 返回-1 表示没有找到 public int getShortcutByChar(char c){ for(int i=0;i<itemList.size();i++){ if(itemList.get(i).getShortcut().equals(""+c)){ return i; } } return -1; } //---------------- //extends BaseAdapter @Override public int getCount() { // TODO Auto-generated method stub return itemList.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub LinearLayout lLayout = new LinearLayout(context); lLayout.setOrientation(LinearLayout.HORIZONTAL); ImageView image =new ImageView(context); image.setImageDrawable(itemList.get(arg0).getIcon()); lLayout.addView(image, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,30)); TextView text =new TextView(context); text.setText(itemList.get(arg0).getText()); text.setGravity(Gravity.CENTER); lLayout.addView(text, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,30)); TextView textShortcut =new TextView(context); textShortcut.setText(" ("+itemList.get(arg0).getShortcut()+")"); textShortcut.setGravity(Gravity.CENTER); lLayout.addView(textShortcut, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,30)); return lLayout; } }
3. 定义函数setupMenu 用于执行菜单有关工作
public void setupMenu(){ viewMenu = this.getLayoutInflater().inflate(R.layout.menu, null); popMenu = new PopupWindow(viewMenu,500,200); lView = (ListView)viewMenu.findViewById(R.id.list); addExampleItem(); addItemClickListener(); addItemShortcutListener(); }
4. addExampleItem 用于添加菜单例子 并适配之 实现为:
public void addExampleItem(){ iTAdapter = new IconifiedTextAdapter(this); iTAdapter.addItem("打开", R.drawable.favicon,"O"); iTAdapter.addItem("查看", R.drawable.favicon,"V"); iTAdapter.addItem("刷新", R.drawable.favicon,"E"); iTAdapter.addItem("新建", R.drawable.favicon,"w"); iTAdapter.addItem("属性", R.drawable.favicon,"R"); lView.setAdapter(iTAdapter); }
5. addItemClickListener 用于注册 菜单选项 可单击 然后执行之 实现为:
public void addItemClickListener(){ lView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub executeMenuItem(arg2); popMenu.dismiss(); } }); }
6. addItemShortcutListener 用于注册 快捷键 接受用户按下快捷键 然后根据用户输入 查出其索引值 再执行之 实现为:
public void addItemShortcutListener(){ //使得 PopupWindow 处于 可输入 状态 默认是不接受的 popMenu.setFocusable(true); popMenu.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE); lView.setOnKeyListener(new OnKeyListener(){ @Override public boolean onKey(View arg0, int arg1, KeyEvent arg2) { // TODO Auto-generated method stub //解析 目标KeyEvent int code = arg2.getKeyCode(); int action = arg2.getAction(); //合法按键 且 按键抬起 if((code >= KeyEvent.KEYCODE_A && code <= KeyEvent.KEYCODE_Z)&& action == KeyEvent.ACTION_UP){ char key = (char)(arg2.getKeyCode() - KeyEvent.KEYCODE_A + 65); int id = iTAdapter.getShortcutByChar(key); if(id>=0){ //to execute the dest operation executeMenuItem(id); popMenu.dismiss(); return true; } return false; } else {//其他行为 按系统默认处理 return false; } } }); }
7. 注册onCreateOptionsMenu 当按下Menu 弹出PopupWindow
public boolean onCreateOptionsMenu(Menu menu) { popMenu.showAtLocation(findViewById(R.id.main), Gravity.CENTER, 20, 20); //若返回值=false 表示 不弹出系统菜单 否则 弹出菜单 return false; }
8. 定义executeMenuItem 根据得到id 执行相关操作 因为此仅为演示 所以只会输出Log信息 大家可自行扩展
public void executeMenuItem(int id){ Log.d("TAG","Menu item:"+id); }
9. emulator 运行效果 因为具体按键没有办法截图 所以只能看看界面
- IconifiedTextMenuTest.rar (48.1 KB)
- 下载次数: 374
评论
7 楼
sunersky
2010-05-20
gryphone 写道
sunersky 写道
楼主好,你有没有什么方法可以在setFocusable之后,再点击menu或返回键,可以达到dismiss popupwindow的效果呢,我试了很多种方法都不ok
默认就是如此啊 怎么你那边不是这样么?XD
Hmm,再点击menu就不好用了呢。。苦恼Ing..如果!setFousable还可以关闭,set之后menu,就不可以了,返回还是ok.
6 楼
gryphone
2010-05-18
sunersky 写道
楼主好,你有没有什么方法可以在setFocusable之后,再点击menu或返回键,可以达到dismiss popupwindow的效果呢,我试了很多种方法都不ok
默认就是如此啊 怎么你那边不是这样么?XD
5 楼
sunersky
2010-05-18
楼主好,你有没有什么方法可以在setFocusable之后,再点击menu或返回键,可以达到dismiss popupwindow的效果呢,我试了很多种方法都不ok
4 楼
gryphone
2010-05-06
drizzlemao 写道
那个“新建(W)”的快捷键是错误的哦。应该是大写的吧。
谢谢提醒 真仔细~~
3 楼
drizzlemao
2010-05-05
那个“新建(W)”的快捷键是错误的哦。应该是大写的吧。
2 楼
gryphone
2010-05-05
chinapengwei_wh 写道
楼主能否把源代码公布一下?
done~~
1 楼
chinapengwei_wh
2010-05-05
楼主能否把源代码公布一下?
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2617Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5947ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3186MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19045CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3145获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9451PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5961Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14468SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1457Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2247流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3233NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1227自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3165模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2484TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3987View 拖动&插入 即: ... -
*.gif 解码 - 实践
2010-05-02 18:58 1752*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1524我们知道Android 默认是不支持*.gif 的 但是 ... -
shortcut+livefolder
2010-04-19 13:08 1500shortcut+livefolder Live ...
相关推荐
Android Studio 快捷键设置-MacOS版本
Android Studio 快捷键设置-Windows版本
电脑应用快捷键---很有用的--提高效率
电脑快捷键大全--史上最全的,包你满意. 电脑快捷键大全--史上最全的,包你满意.
anki-PC端快捷键--花花整理.xlsx
windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑
快捷键设置-作者:大表格
根据给定文件内容,文件标题为 "logic快捷键.pdf",描述同样为 "logic快捷键.pdf",文件标签为空。部分内容包含了大量与音乐制作软件Logic Pro相关的快捷键信息。我们将根据这些内容来梳理出Logic Pro软件中的快捷键...
标题中提到的"Windows7键盘快捷键大全--完整版.pdf"涉及的是Windows 7操作系统中使用键盘进行操作的快捷方式。这些快捷键能够帮助用户在使用Windows 7系统时更加高效地执行各种操作。 描述部分重复了标题内容,没有...
电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键
在电脑使用过程中,快捷键是提高工作效率的重要工具。"电脑快捷键大全-key-060808"这个资源提供了一份全面的快捷键列表,涵盖了多种操作系统和常见软件中的常用快捷键。以下是一些关键的电脑快捷键及其作用: 1. **...
winxp快捷键F1--F12在系统中的妙用.docx
英文版的vim快捷键整理。 一张图片上总结了vim的快捷键。
根据给定文件内容,我们可以从中提取出以下CAD软件的常用快捷键及其对应的功能。由于文件内容有些许OCR识别错误和重复项,我们将会按照常规CAD命令的格式进行整理和修正,以便提供准确的快捷键知识点。 1. **基本...
键盘快捷键是使用键盘上特定的键组合快速执行某个命令或操作的方法。在Windows操作系统中,快捷键能够提升用户的工作效率,简化复杂的操作流程。以下是Windows系统中常用快捷键的分类和说明: 1. 基础编辑快捷键: ...
Excel表格中常用快捷键大全-快捷键大全表参考.doc
Adobe Illustrator是一款专业的矢量图形编辑软件,广泛应用于插画、排版、图标设计、LOGO设计以及印刷和网页制作等多个领域。了解并熟练使用快捷键是提升工作效率的重要手段。由于提供的内容存在一些OCR扫描错误,我...
LabVIEW快捷键CTRL-T后,弹出错误对话框。解决办法,从其他好用的计算机上拷贝替换即可。目录“C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\analyzer”
精彩之极,对于新手来说,简直是雪中送炭啊,下载把
ProE快捷键大全-映射表(Ye′s_ProE_2.0-5.0全套通用映射键Version_I4)