最近发现PopupMenu用来做菜单非常的方便,而且使用也非常的简单,下面我们就来看下如何使用的吧。
首先在布局文件中创建两个Button。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.chengshi.popupwindowdemo.MainActivity">
<Button
android:id="@+id/btn_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出选择框"/>
<Button
android:id="@+id/btn_popup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出PopupMenu"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>
</RelativeLayout>
然后找到两个Button设置点击事件。并创建出两个PopupMenu。
View v1 = findViewById(R.id.btn_popup);
if (v1 != null) {
v1.setOnClickListener(this);
mMenu = new PopupMenu(this, v1);
mMenu.getMenuInflater().inflate(R.menu.menu_popupmenu, mMenu.getMenu());
mMenu.setOnMenuItemClickListener(this);
}
View v2 = findViewById(R.id.btn_check);
if (v2 != null) {
v2.setOnClickListener(this);
mCheckMenu = new PopupMenu(this, v2);
mCheckMenu.getMenuInflater().inflate(R.menu.menu_checkmenu, mCheckMenu.getMenu());
mCheckMenu.setOnMenuItemClickListener(this);
}
上面我是创建了两个不同的菜单,因为每次点击按钮后都创建感觉不大好,所以我就直接在onCreate方法中创建了。而且这里我不需要Button的特有属性就不强转了。
R.menu.menu_checkmenu 是一个单选菜单组。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/check1"
android:title="选择1"/>
<item
android:id="@+id/check2"
android:title="选择2"/>
<item
android:id="@+id/check3"
android:title="选择3"/>
</group>
</menu>
android:checkableBehavior的值有三个:
1. single:单选
2. all:多选。(不过多选貌似不好用。因为选择完一个以后菜单就自动消失了,目前没有找到解决的办法。如果有哪位大神知道请留言,万分感激。)
3. none:没有选择框。(相当于普通菜单。)
R.menu.menu_popupmenu 是一个普通的菜单。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_unKnow"
android:title="未知"/>
<item
android:id="@+id/action_setting"
android:title="设置"/>
<item
android:id="@+id/action_startActivity"
android:title="启动Activity"/>
</menu>
现在来看下代码都是做了什么事情吧。
mCheckMenu = new PopupMenu(this, v2);
这句代码是创建一个PopupMenu对象。第一个参数是一个Context上下文,第二个参数就是要绑定的对象,就是说你要在哪个View上弹出菜单。
mCheckMenu.getMenuInflater().inflate(R.menu.menu_checkmenu, mCheckMenu.getMenu());
这句代码首先是获取到PopupMenu的填充器,然后将我们写好的menu文件填充进来,inflate()方法有两个参数,第一个是我们的menu菜单文件,第二个参数是我们要将菜单填充到哪里。
mCheckMenu.setOnMenuItemClickListener(this);
这句代码是给PopupMenu设置菜单条目点击监听。下面是点击监听中的代码。
@Override
public boolean onMenuItemClick(MenuItem item) {
if (item.getItemId() == R.id.action_unKnow) { //根据ItemId进行判断。
Toast.makeText(this, "您点击了“未知“按钮", Toast.LENGTH_SHORT).show();
return true;
} else if (TextUtils.equals(item.getTitle(), "设置")) { //根据标题进行判断。
Toast.makeText(this, "您点击了“设置”按钮", Toast.LENGTH_SHORT).show();
return true;
} else if (item.getItemId() == R.id.action_startActivity) {
startActivity(new Intent(this, NewActivity.class));
return true;
} else if (item.getItemId() == R.id.check1
|| item.getItemId() == R.id.check2
|| item.getItemId() == R.id.check3) {
item.setChecked(!item.isChecked());
Toast.makeText(this, "您点击了“" + item.getTitle() + "”按钮", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
这里我用if语句是为了告诉大家getItemId()和item.getTitle()分别返回的结果,getItemId()返回的是menu资源文件中的资源ID,item.getTitle()返回的是menu资源文件中的title属性值。其他的就不解释了,都是很简单的代码。
到了这里还没有真正的完事儿。还需要在点击Button后将PopupMenu show出来。下面是按钮的onClick监听中的代码。
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_check:
mCheckMenu.show();
break;
case R.id.btn_popup:
mMenu.show();
break;
}
}
到了这里就完成了,怎么样是不是很简单。至于更复杂的用法希望大家踊跃留言。下面是效果图,供大家参考。
写博客不易,如果你觉得有用,请帮忙顶一下以表示支持。感谢!!!
当我们在Linux系统中需要查看接口和地址关系时有两个文件可以查看/proc/net/if_inet6 //接口和单播地址/proc/net/igmp6 //接口和组播地址最开始接触到IPv6的开源代码时看到代码中有去读取/proc/net/if_inet6文件,但是看完之后一脸懵逼,自己去网上搜索后发现关于这个文件内容的介绍是少之又少(实际上关于IPv6的资料网上是少之又少,英文的还有点中文的几乎没得~),所以就想着结合代码和自己的理解来写一个,希望能给刚接触IPv6的人一些帮助_/proc/net/if_inet6
目录一、Socket概述二、UDP收发原理:特点:UDP发:UDP收 :运行结果:三、UDP综合实例运行结果:四、TCP Socket原理:客户端:服务端:实验结果:五、TCP Socket多线程应用六、Socket与HTTP七、总结期末考试考到了Socket概念的简答题。之前做项目自己也用到过。刚好现在空闲整理一..._c# onenet
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 从2012-2017年这段时间,自己对rtos很痴迷。市面上能学习的rtos,一般都会把代码拿过来看一看,学一学怎么实现的。要说现在linux和rtos,基本上应用场景还是分的很清楚的。中低频率的soc,但是对实时性要求很高的场景一般用rtos,其他则用linux。然而很多场景下..._rtthread signal
计算机在材料科学中的应用圆孔应力集中分析问题:一个承受单向拉伸的无限大板,在其中心位置一个校内圆孔,材料属性为弹性模量E=2×1110Pa,泊松比为0.3,拉伸载荷q=1000Pa,平板厚度t=0.1.根据平板的物理性质,该问题属于平面应力问题。然后根据平板结构的对称性,只要分析其中的二分之一即可操作步骤1、定义工作文件名和工作标题(1)定义工作文件名:执行Utility Menu>File..._计算机材料分析题
题目:Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is._pat a1025java
setset<int> s;//默认升序,相当于 set<int,less<int> >。set<int,less<int> > s; //该容器是按升序方式排列元素。set<int,greater<int>> s; //该容器是按降序方式排列元素。mapmap<T1,T2> m;//默认按键的升序方式排列元素,相当于下方的lessmap<T1,T2,less<T1> > _c++集合 默认升序还是降序
/// /// 屏幕类,用于全屏程序&显示任务栏 /// public class ScreenHelper { #region Windows Mobile全屏 [DllImport("aygshell.dll")] public static extern bool SHFullScreen(In_unity全屏显示任务栏
以前听说军火商发战争财,看了这本书才知道银行家的贪婪和残酷是可怕的。美国的南北战争,两次世界大战都有银行家的影子。而美国的中央银行美联储是私有的。美国的多位总统被暗杀都与这些银行家有关系。这些家伙还有一种通过货币发行洗劫财产的手法叫做剪羊毛,先经济过热然后紧缩导致经济突然萎缩,获取暴利,真是巧取豪夺阿。尽管对于这本新书有很多的争议,还是很值得一看的。转载于:https://www.cnblogs...
首先来一段网上关于前向星的描述:前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了.用len[i]来记录所有以i为起点的边在数组中的存储长度.用head[i]记录以i为边集在数组中的第一个存储位置.再来一段另外的一个介绍图的存储一般有...
Windows10安装Apache2.4启动失败。原来是端口被VisualSVN Server占用了443端口,这个端口不是httpd.conf里配置的那个Listen 80端口。httpd启动刚好需要443端口,停止VisualSVN Server后重新运行就好了。...
问题主要是因为要在服务器上跑项目,虽然有root的用户,但是不能直接用root去跑项目,还是要在用户名下去安装相关的Anaconda3软件,这样就可以用我们的相关东西了。解决安装步骤:下载:这里我是在window上下载之后直接传上服务器的:给出网址https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/本人用wget不知道为什么会出错,所以就直接网址下载了下载后进入软件所在位置:运行下面命令bash Anaconda3-2018_centos为什么不能在root下装anaconda
关于SUSE12遇到的一些问题的解决方法装完系统之后连不上外网SSH连不上服务器,重启之后需要进服务器手动重启SSH服务安装JDK和Tomcat并配置自启动公司买了两台戴尔服务器,老板说是要和SAP的服务器统一管理,要求我们也用SUSE。公司没有专门的运维人员,整个开发团队也没有懂linux的,被老板坑的只能去百度找解决方法。在这个过程中发现了一些问题,整理一下装完系统之后连不上外网装完系统..._suse 12常见问题