- 浏览: 426893 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 2571Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5861ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3104MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 18878CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3097获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9389PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5917Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14364SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1409Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2122流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3152NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1162自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3096模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2379TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3928View 拖动&插入 即: ... -
*.gif 解码 - 实践
2010-05-02 18:58 1650*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1484我们知道Android 默认是不支持*.gif 的 但是 ... -
shortcut+livefolder
2010-04-19 13:08 1456shortcut+livefolder Live ...
相关推荐
Android Studio 快捷键设置-MacOS版本
Android Studio 快捷键设置-Windows版本
Windows7键盘快捷键大全--完整版.pdf
电脑应用快捷键---很有用的--提高效率
AI快捷键----站酷网.docx
3dsmax快捷键全集-快速建模必备。.doc3dsmax快捷键全集-快速建模必备。.doc3dsmax快捷键全集-快速建模必备。.doc3dsmax快捷键全集-快速建模必备。.doc3dsmax快捷键全集-快速建模必备。.doc3dsmax快捷键全集-快速建模...
CAD2017快捷键--CAD常用快捷键命令大全.pdf
IDEA快捷键大全--按照快捷键第一个组合健分类
电脑快捷键大全--史上最全的,包你满意. 电脑快捷键大全--史上最全的,包你满意.
anki-PC端快捷键--花花整理.xlsx
windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑windows快捷键大全-不用鼠标也能操控电脑
快捷键设置-作者:大表格
Cimatron E快捷键pullcommands-说明
CAD快捷键--CAD常用快捷键命令大全2014[归类].pdf
Eclipse最常用快捷键--一定要很熟悉,这都是些Java中Eclipse的快捷键,对刚开始学习使用Eclipse是非常有用的
电脑快捷键大全-key-060808里面详细记录了各种快捷键
电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键电脑快捷键
photoshop快捷键学习--快速学会PS.pdf