PopupWindowMenuUtil【popupwindow样式菜单项列表】
版权声明:本文为HaiyuKing原创文章,转载请注明出处!
前言
实现PopupWindow样式的Menu菜单。
效果图

代码分析
使用PopupWindow实现。
列表使用的是Recyclerview。
实现了当设置当大于6个列表项的时候,设置列表总高度值为6个列表项的高度值。
如果不想有左侧的图标,则不传入图片的id值即可,因为默认值为0。
使用步骤
一、项目组织结构图


注意事项:
1、 导入类文件后需要change包名以及重新import R文件路径
2、 Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
在APP中的bundle.gradle文件中添加以下代码,引入design【版本号跟appcompat-v7的保持一致】
apply plugin: 'com.android.application'
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.why.project.popupwindowmenuutildemo"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
//RecyclerView
compile "com.android.support:recyclerview-v7:27.1.1"
}
将popupwindowMenu包中的文件复制到项目中

将popup_menu_bg.9.png文件复制到项目的drawable-xhdpi中

将布局文件复制到项目中

至此,PopupWindowMenuUtil就可以使用了。
三、使用方法
activity_main布局文件
<?xml version="1.0" encoding="utf-8"?>
<!-- 界面布局文件 -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <!-- 引入导航栏 -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="52dp"
android:orientation="horizontal"
android:background="#ffffff"
> <!-- 固定图标(更多) -->
<ImageView
android:id="@+id/moreImg"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/nav_more_h"
android:contentDescription="@string/app_name"
android:gravity="center_vertical"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:layout_alignParentRight="true"
/> </RelativeLayout>
<!-- 中横线 -->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#e9e9e9"
/> </LinearLayout>
MainActivity文件
package com.why.project.popupwindowmenuutildemo; import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast; import com.why.project.popupwindowmenuutildemo.popupwindowMenu.PopUpMenuBean;
import com.why.project.popupwindowmenuutildemo.popupwindowMenu.PopupWindowMenuUtil; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { /**更多图标*/
private ImageView mMoreImg; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initViews();
initEvents();
} private void initViews() {
mMoreImg = (ImageView)findViewById(R.id.moreImg);
} private void initEvents() {
mMoreImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openMenu();//弹出更多操作的menu列表
}
});
} //弹出更多操作的menu列表
private void openMenu(){
final ArrayList<PopUpMenuBean> menuList = new ArrayList<PopUpMenuBean>(); PopUpMenuBean popUpMenuBean = new PopUpMenuBean();
popUpMenuBean.setImgResId(R.drawable.nav_menu_share);
popUpMenuBean.setItemStr("分享");
menuList.add(popUpMenuBean); PopUpMenuBean popUpMenuBean1 = new PopUpMenuBean();
popUpMenuBean1.setImgResId(R.drawable.nav_menu_fabu);
popUpMenuBean1.setItemStr("发布");
menuList.add(popUpMenuBean1); PopupWindowMenuUtil.showPopupWindows(MainActivity.this, mMoreImg, menuList, new PopupWindowMenuUtil.OnListItemClickLitener() {
@Override
public void onListItemClick(int position) {
//如果position == -1,预留位,用来标明是点击弹出框外面的区域
if(position != -1) {
if(menuList.get(position).getItemStr().equals("发布")){
Toast.makeText(MainActivity.this,"发布",Toast.LENGTH_SHORT).show();
}else if(menuList.get(position).getItemStr().equals("分享")){
Toast.makeText(MainActivity.this,"分享",Toast.LENGTH_SHORT).show();
}
}
}
});
}
}
混淆配置
无
参考资料
暂时空缺
项目demo下载地址
https://github.com/haiyuKing/PopupWindowMenuUtilDemo
PopupWindowMenuUtil【popupwindow样式菜单项列表】的更多相关文章
- WijmoJS 中自定义 React 菜单和列表项模板
WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...
- Android菜单项内容大全
一.介绍: 菜单是许多应用中常见的用户界面组件. Android3.0版本以前,Android设备会提供一个专用"菜单"按钮呈现常用的一些用户操作, Android3.0版本以后, ...
- SharePoint 2013:自定义ECB菜单项的添加
本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xm ...
- TortoiseSVN菜单项功能说明
TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseS ...
- JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示
一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include ...
- 基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】
1.概述 开发平台OS:windows 开发平台IDE:vs code 本篇章将介绍自定义标题栏和右键菜单项,基于electron现有版本安全性的建议,此次的改造中主进程和渲染进程彼此语境隔离,通过预 ...
- 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)
@color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...
- 实战android菜单项之XML加载菜单与动态菜单项[转]
原文地址:http://blog.csdn.net/kaiwii/article/details/7767225 自定义android应用程序的菜单项首先要知道切入点.经过学习,知道主要是两个Acti ...
- winform 菜单项显示历史记录 分类: WinForm 2014-07-11 18:15 196人阅读 评论(0) 收藏
(1)创建一个项目,将其命名为MenuHistory,默认窗体为Form1. (2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件.创建一个&qu ...
随机推荐
- [转]树莓派.设置自动重连WiFi
由于不可知的原因,有可能会导致树莓派失去连接,这时候需要重新连接WiFi. 自动重连的原理是,定期查看是否断网,如果断网了重启WiFi,参考的文章是这篇,第一步略有修改. 1.Python 代码 au ...
- 深入剖析最新IE0day漏洞
在2018年4月下旬,我们使用沙箱发现了IE0day漏洞;自从在野外发现上一个样本(CVE-2016-0189)已经有两年多了.从许多方面来看,这个特别的漏洞及其后续的开发比较有趣.下一篇文章将分析最 ...
- UWP中实现大爆炸效果(二)
上一回实现了一个宽度不均匀的Panel,这次我们编写一个简单的BigbangView主体. 首先创建一个模板化控件,删掉Themes/Generic.xaml中的<Style TargetTyp ...
- 轻量级.Net Core服务注册工具CodeDi发布啦
为什么做这么一个工具 因为我们的系统往往时面向接口编程的,所以在开发Asp .net core项目的时候,一定会有大量大接口及其对应的实现要在ConfigureService注册到ServiceCol ...
- C# -Asp.Net.SignalR.Core之Hub
前言 程序员的进步是需要环境的,良好的团队环境,良好的开发环境,会让人进步的更加快速. 所以,我认为,如果一个程序员,在2019年还在用Visual Studio 2005开发,那么,他,大概率,不会 ...
- 在nuget上发布自己的程序集教程
前期准备 [1]注册nuget官网账号:注册地址:https://www.nuget.org/ [2]下载Nuget.exe文件:下载地址:https://www.nuget.org/downloa ...
- solr 学习笔记1
创建核心(帮助: solr create_core -help) 例子: solr create_core -c mjj_core -d /var/solr/mjj_config (-c 是核心名称 ...
- 前端笔记之CSS(下)浮动&BFC&定位&Hack
一.浮动 1.1 各个语言的主要知识点 HTML:标签语义化(那么怎么样布局才是合理的?没有绝对的对和错) CSS: 样式: 布局: 标准流(标准文档流.普通文档流):盒子模型(width/heigh ...
- HTML 练习on方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vscode新建html文件
在Vscode新建html文件 1.点击Open Folder: 2.选择目标文件夹,新建一个拓展名为html的文件: 3.在第1行输入!(英文状态下),按tab键,新建成功.界面如下图所示: