android popupmenu 动态添加,Android PopupMenu 的使用

article/2025/9/29 21:19:15

Android 轻量化组件 PopupMenu 的使用

估计很多人遇到过这种场景:

要求弹出的PopupWindow里面是一个列表,我们使用时都是在里面套个ListView或RecyclerView ,现在我们不需要在做这样繁琐的工作了。

在官方android.support.v7.widget 包下提供的 PopupMenu 组件,已经被越来越多的项目所采用。我们先看一下几个 app 的效果:

60a34a4d52bd

60a34a4d52bd

60a34a4d52bd

这是一个非常轻量化的上下文菜单组件,简洁、使用方便。

1.创建资源文件

在 res 目录下新建 menu 文件夹,这个文件夹主要是来存放菜单资源文件的。我们新建 sample_menu.xml文件:

android:id="@+id/next"

android:icon="@mipmap/ic_launcher"

android:title="下一首播放"/>

android:id="@+id/add"

android:icon="@mipmap/ic_launcher"

android:title="添加到歌单"/>

android:id="@+id/detail"

android:icon="@mipmap/ic_launcher"

android:title="歌曲详情"/>

android:id="@+id/del"

android:icon="@mipmap/ic_launcher"

android:title="删除歌曲"/>

随便写几个菜单选项。

2.在代码中展示

private void showPopupMenu(View view) {

// 这里的view代表popupMenu需要依附的view

PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);

// 获取布局文件

popupMenu.getMenuInflater().inflate(R.menu.sample_menu, popupMenu.getMenu());

popupMenu.show();

// 通过上面这几行代码,就可以把控件显示出来了

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

@Override

public boolean onMenuItemClick(MenuItem item) {

// 控件每一个item的点击事件

return true;

}

});

popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {

@Override

public void onDismiss(PopupMenu menu) {

// 控件消失时的事件

}

});

}

有时候我们还需要根据不同的条件,显示或隐藏指定的 item,比如在点击第二个按钮的时候隐藏掉“删除歌曲”的选项,只需要添加几行代码:

...

popupMenu.show();

switch (view.getId()) {

case R.id.btn_world:

popupMenu.getMenu().findItem(R.id.del).setVisible(false);

break;

default:

break;

}

...

有时候我们还需要根据不同的条件,显示或隐藏指定的 item,比如在点击第二个按钮的时候隐藏掉“删除歌曲”的选项,只需要添加几行代码:

...

popupMenu.show();

switch (view.getId()) {

case R.id.btn_world:

popupMenu.getMenu().findItem(R.id.del).setVisible(false);

break;

default:

break;

}

...

来看一下效果:

60a34a4d52bd

60a34a4d52bd

PopupMenu 默认是在指定控件的下方显示的,但是当检测到空间不足时,会自动调整显示的位置。而且自带动画效果,是不是很方便呢?

3.在 PopupMenu 中显示图标

以前用到带图标的菜单时,一般都是通过自定义 PopupWindow 来实现的,比较麻烦,其实 PopupMenu 可以很简单的实现这个功能,不过需要用到反射。关于反射,我理解的不深,所以下面的代码也是从网上粘贴过来的。细心的同学可能会发现,在 xml 资源文件中,我在每个 item 标签里都写了 icon 的属性。没错,要显示的正是在这里设置的图片。当然,如果你不需要显示图标的话,icon 是没有必要写的。

try {

Field field = popupMenu.getClass().getDeclaredField("mPopup");

field.setAccessible(true);

MenuPopupHelper helper = (MenuPopupHelper) field.get(popupMenu);

helper.setForceShowIcon(true);

} catch (NoSuchFieldException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

最终效果:

60a34a4d52bd

对于 PopupMenu 的使用暂时想到了这么多,以后如果遇到更多的使用技巧,会再来补充的。


http://chatgpt.dhexx.cn/article/b1QsFOcL.shtml

相关文章

android实现菜单栏第三部分popupmenu,弹出式菜单

点击布局内菜单按钮会弹出菜单 就成跟其他菜单差不多&#xff0c;首先是在主界面建一个按钮&#xff0c;然后写出菜单布局&#xff0c;最后在主页面写出逻辑&#xff0c;按钮我们写一个点击事件&#xff0c;等会在主界面在这个点击事件里面写菜单 <?xml version"1.0…

PopupMenu的简要使用

PopupMenu的创建&#xff0c;使用及常见用法 一&#xff1a;功能概述 PopupMenu可以非常方便的在指定view的下面显示一个弹出菜单&#xff0c;该弹出菜单的位置是可变的。在一些应用里面例如浏览器里面长按屏幕会显示弹出菜单。 二&#xff1a;创建基本流程 1&#xff1a;创…

解决IOS select下拉框样式

文章目录 问题解决方法 问题 一般来说&#xff0c;在ios端&#xff0c;对于select下拉框会默认出现黑色背景&#xff0c;input输入框上面出现阴影&#xff0c;导致用户体验感不是很好&#xff0c;总体原因是ios中对透明度渲染的效果不是很好。 会出现如下图所示现象&#xff…

vue3—elementPlus如何单独修改页面中的下拉框样式

vue3中只能去修改popper-class这个属性去修改 &#xff08;自己想要的样式&#xff09;重点 :样式修改不能写在scoped中&#xff0c;可以单独开个style popper-class"blueBack"&#xff08;blueBack为自定义class名&#xff09; <el-select popper-class"blu…

VUE3 如何修改饿了么element-plus的下拉框样式?

VUE3 如何修改饿了么element-plus的下拉框样式&#xff1f; 如图&#xff0c;饿了么的样式 已经不在app里面&#xff0c;所以在页面中无法通过样式穿透进行设置样式&#xff0c;只能修改全局的样式&#xff0c;那么我每个页面的样式不一样 每个页面都需要去改全局样式 我想到的…

Python PyQt5l表单应用 - 自定义选择下拉框样式

如何调整默认选择下拉框的样式呢&#xff1f; 1.文件中引用类 QListView from PyQt5.QtWidgets import QListView 2.在控件中添加样式&#xff0c;示例 self.typeCmb.setObjectName("typeCmb") self.typeCmb.setStyleSheet("#typeCmb{border:1px solid rgb(…

Qt QComboBox 下拉框样式修改

今天查了好多资料&#xff0c;发现做出来的都不理想。去查了下Qt源码。发现setView(QAbstractItemView *itemView)这个方法&#xff0c;官方的解释是这样的&#xff1a; void QComboBox::setView(QAbstractItemView *itemView) Sets the view to be used in the combobox pop…

css修改layui的下拉框样式 js_layui创建表单下拉框样式不显示

border-left: 5px solid #009688; 注释&#xff1a;solid实体&#xff0c;实心样式&#xff1b; Blockquote&#xff1a;块引用;Fieldset&#xff1a;字段集; 1.所有浏览器都支持 标签。 fieldset 元素可将表单内的相关元素分组。 标签将表单内容的一部分打包&#xff0c;生成…

elementUi——select选择框的下拉框样式调整——基础积累

最近在用elementUI写后台管理系统&#xff0c;有个弹窗添加的功能&#xff0c;由于弹窗中的内容只有两项&#xff0c;而下拉框的高度较高&#xff0c;导致页面很空。 需要&#xff1a;将下拉框的高度调小&#xff0c;页面布局会好看。 调整前 调整后 实现 通过elementUi官网…

antd a-select下拉框样式修改 vue3 亲测有效

记录一下遇到的问题 1.遇到问题&#xff1a; 使用到Vue3 Ant Design of Vue 3.2.20&#xff0c;但因为项目需求样式&#xff0c;各种查找资料都未能解决; 2.解决问题&#xff1a; ①我们审查元素可以看到&#xff0c;下拉框是在body中的; ①在a-select 元素上添加dropdownCla…

修改select下拉框样式兼容IE和Chrome浏览器

文章目录 问题解决办法 问题 在Chrome浏览器和IE11浏览器下&#xff0c;select下拉框表现的样式不一致。Chrome浏览器下&#xff0c;如图所示&#xff1a; IE11浏览器下&#xff0c;如图所示&#xff1a; 此时select下拉框的css的代码如下&#xff1a; .Data_select {widt…

QComboBox下拉框样式

QComboBox下拉框样式

自定义elementUI select下拉框样式

无论加important还是deep &#xff0c;发现怎样也改不了下拉框的样式&#xff0c;点击元素发现下拉框与script标签是同级的&#xff08;看下图&#xff09; 官方文档上写加 :popper-append-to-body‘false’ &#xff0c;再修改样式&#xff0c;但对我好像没有用 官方文档上…

a-select 下拉框样式修改

// 下拉框的总的样式/deep/.ant-select-dropdown-menu {background: #091F40;border: 1px solid rgba(122, 191, 255, 0.2);box-shadow: 0px 2px 12px rgba(0, 0, 0, 0.2);border-radius: 2px;height: 200px;}// 下拉框 每个item的样式/deep/.ant-select-dropdown-menu-item {f…

element UI指定下拉框样式修改

在一个页面中&#xff0c;有多个下拉框&#xff0c;由于下拉框等级与dom同级&#xff0c;只能改变所有。 解决&#xff1a;在select 中加入popper-class“名称” 即可为下拉框添加类名&#xff0c;从而修改

修改element-ui 下拉框样式

要求定制element-ui选择框Select&#xff0c;需求为增加一根竖线&#xff0c;原始样式为如图&#xff0c;通过打开f12查看样式&#xff0c;做如下调整 修改后效果&#xff1a; //html <div class"hello"><el-select v-model"value" placeholder&q…

原生select下拉框样式修改:去除聚焦的黄色边框样式

原生下拉框聚焦状态border会变黄色&#xff0c;其实并不是border&#xff0c;而是边框边缘的外围 轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指…

css自定义下拉框样式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css自定义下拉框样式</title><style>body {background:#fff;display:flex;justify-content: center;align-items:center;flex-wrap:wrap;p…

element-ui 下拉框样式修改

问题描述 当下拉框字段存在超长的情况下增加横向滚动条&#xff0c;效果如图所示&#xff1a; 解决办法&#xff1a; 在全局样式中添加如下代码&#xff1a; .el-select-dropdown {max-width: 330px;}.el-select-dropdown__item {display: inline-block;}.el-select-dropdow…

HTML下拉框样式美化

在网页中&#xff0c;下拉框的样式最难美化&#xff0c;默认样式巨丑&#xff0c;好在现在已经有各种框架实现了下拉框的样式美化&#xff0c;主要思路都是通过JS代码将下拉框元素用更容易设置样式的div进行替换&#xff0c;再将对应选项及事件进行关联。 最近一项目需要修改很…