【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单
利用XML创建菜单
在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进行设置。在之前的Pro Android学习笔记(十):了解Intent(上)#系统的Intent中我们已经给了一个如何利用XML进行菜单项设计的详细小例子,这里就不在重复。这里仅补充一下说明。
XML的有关属性
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This group uses the default category. -->
<group android:id="@+id/menuGroup_Main">
<item android:id="@+id/menu_testPick"
android:orderInCategory="5"
android:icon="@draw/ic_leaf"
android:title="Test Pick" />
<item .../>
<item .../>
<!-- 下面是子菜单的例子:采用menu嵌套的方式实现 –>
<item android:id="@+id/file" android:title="@string/file" >
<menu>
<item ...... />
<item ...... />
</menu>
</item>
</group>
</menu>
相关的可以阅读reference中的API Guide。(sdk/docs/guide/topics/ui/menus.html#xml)。除了上面例子给出的属性外,部分常用的属性如下:
如果我们要制定menu的category,这可通过以下的方式:
<group android:id="@+id/some_group_id " android:menuCategory="secondary">
可以设置checkable属性,例子如下:
<?xml version="1.0" encoding="utf-8"?>
<menu …… >
<group android:id="@+id/menuGroup_popup" android:checkableBehavior="all">
<item android:id="@+id/pop_menu_1" android:checked="true" android:title="popup.item.1" />
<item android:id="@+id/pop_menu_2" android:title="popup.item.2" />
</group>
</menu>
下图是在一个pop-up菜单上采用采用这个menu xml构造的样式:
此外还可以设置enable,visible,shortcut等属性,如下:
<item android:id="… " android:enabled="true" … />
<item android:id="… " android:alphabeticShortcut="a" … />
<item android:id="... " android:visible="true" ... />
onClick事件
在之前学习中,我们知道menu item支持click listener,因此我们可以直接在item中设置onClick事件的回调函数,如下:
<item …… android:onClick="onClick_callback_method_name" />
Pop-up菜单
当view收到某种事件,例如点击,可以触发弹出菜单(PopupMenu)。下面是小例子的代码:
public class PopupMenuTest extends Activity{
private TextView infoTv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.popup_layout);
infoTv = (TextView)findViewById(R.id.pop_pureInfo);
showInfo("点击这个Textview,将演示Pop-up Menu.");
//点击textView时,弹出popupMenu
infoTv.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showPopupMenu();
}
});
}
private void showPopupMenu(){
PopupMenu popMenu = new PopupMenu(this,infoTv);
popMenu.inflate(R.menu.my_popup);
//popMenu.getMenuInflater().inflate(R.menu.my_popup, popMenu.getMenu()); //Android 4.0之前的处理
popMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
//不能通过Activity的onOptionsItemSelected()来实现Popup菜单项的触发,而是通过click listener的方式。
public boolean onMenuItemClick(MenuItem item) {
showInfo("Item clicked : " + item.toString());
return false;
}
});
showInfo(popMenu.toString());
popMenu.show();
}
private void showInfo(String info){
infoTv.append(info + "\n");
Log.d(getLocalClassName(),info);
}
}
最初,运行的效果如上左图,popup菜单挤在最上面,根本看不全。而我们期待的是右图的方式。这是因为某view的popup菜单在某view的外面显示,即不会遮挡某view。一开始,我们将textview设置为全屏模式,没有预留空余位置显示,所以成了左图那样,效果很不理想。后来我们将textView的layout_height改为wrap_content,就得到了期待的菜单方式。
如果view所占的空间很大,而菜单的内容有比较多,可以考虑使用contextMenu。
本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。
相关链接: 我的Android开发相关文章
【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单的更多相关文章
- 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单
目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...
- 【转】Pro Android学习笔记(三十):Menu(1):了解Menu
目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(八二):了解Package(1):包和进程
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在之前,我们已经学习了如何签发apk,见P ...
- 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式
可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
随机推荐
- YY大厅接受不到documentcompleted事件处理
多玩大厅在接受到了页面的documentcompleted事件,才会把遮在页面前面的YY游戏中去掉,我们的游戏页面,YY大厅接收不到事件,所以就排查了下 发现原因在于js脚本里有个用iframe做上报 ...
- CentOS6安装DaoCloud加速器
天朝的网,你又不是不懂.我最爱的红杏最近也用不了了.FUCK GFW. 在这,我们使用DaoCloud的加速器,打开网址 https://dashboard.daocloud.io/mirror 找到 ...
- CI 框架下执行CLI(命令行)
1.可以按照Ci官方文件的指导来进行操作 让我们先创建一个简单的控制器,打开你的文本编辑器,新建一个文件并命名为 Tools.php,然后输入如下的代码: <?php class Tools e ...
- Yii2学习笔记---内附GridView配置总结
1./vendor/yiisoft/yii2/web/UrlManager.php 方法createUrl 修改url参数转码2.config/web.php 配置文件Yii::$app(应用主体)的 ...
- P4773 红鲤鱼与绿鲤鱼
P4773 红鲤鱼与绿鲤鱼 暑假比赛的一个水题 总情况数:\(\dfrac{(a+b)!}{a!b!}\) 就是\(a+b\)条鲤鱼中选\(a\) or \(b\)的情况 反正我们会用完鲤鱼,则红鲤鱼 ...
- Docker学习(三)
查看docker daemon服务运行状态 service docker status
- Oracle的PL_SQL的异常处理
--什么是异常 --异常是在PL/SQL运行过程中有可能出现的错误. --执行异常的语句 exception when [异常] when --异常输出信息. --Oracle的预定义异常 CASE_ ...
- Python习题-统计日志中访问次数超过限制的IP
#1.1分钟之内ip访问次数超过200次的,就给他的ip加入黑名单#需求分析: #1.读日志,1分钟读一次 #2.获取这1分钟之内所有访问的ip #3.判断ip出现的次数,如果出现200次,那么就加入 ...
- BEC listen and translation exercise 38
很高兴看到有这么多人想了解我们的体育设施.It's good to see that there are so many people wanting to find out about our sp ...
- Tomcat报错:HTTP Status 500 - Wrapper cannot find servlet class
HTTP Status 500 - Wrapper cannot find servlet class com.servlet.servlet.RegServlet or a class it dep ...