Android简单实现列表菜单--PopupMenu的简单使用。

来源:互联网 发布:手机怎么成为网络歌手 编辑:程序博客网 时间:2024/06/11 21:11

最近发现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的值有三个:

single:单选

all:多选。(不过多选貌似不好用。因为选择完一个以后菜单就自动消失了,目前没有找到解决的办法。如果有哪位大神知道请留言,万分感激。)

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设置菜单条目点击监听。下面是点击监听中的代码。

@Overridepublic 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监听中的代码。

@Overridepublic void onClick(View v) {    switch (v.getId()) {        case R.id.btn_check:            mCheckMenu.show();            break;        case R.id.btn_popup:            mMenu.show();            break;    }}

到了这里就完成了,怎么样是不是很简单。至于更复杂的用法希望大家踊跃留言。下面是效果图,供大家参考。

这里写图片描述

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 生完孩子肚子越来越大怎么办 怀孕8个月肚子小怎么办 孕晚期胎儿不长怎么办 肚子上肉特别多怎么办 奶堵了有硬块怎么办 便秘5天肚子胀怎么办 上火大便拉不出来怎么办 大便拉不出来肚子痛怎么办 戒奶奶涨有硬块怎么办 忌奶的时候涨奶怎么办 娃儿隔奶,,奶涨怎么办 狗肚子很大很鼓怎么办 注册不了的二建怎么办 专升本没考过怎么办 警察乱拘留人该怎么办 玩英雄联盟太卡怎么办 一方离婚证丢了怎么办 遭遇呼死你软件怎么办 开车遇见碰瓷的怎么办 遇到碰瓷老人的怎么办 睿强遥控锁坏了怎么办 地暖分水器坏了怎么办 京东赠品无货怎么办 图书馆的书丢了怎么办 三次临牌用完了怎么办 m3u8文件只有10k怎么办 寿县到淮南高铁怎么办 冰箱停电肉臭了怎么办 新买冰箱有异味怎么办 海康用户被锁定怎么办 大华dss录像没了怎么办 燃气软管超过2米怎么办 中央空调进了水怎么办 车门被划了一道怎么办 镜前灯没有留线怎么办 永大电梯故障44怎么办 物业把电梯停了怎么办 捷信贷款还不起怎么办 c1驾驶证扣12分怎么办 打架被警察抓了怎么办 寄快递写错电话怎么办