版权声明:本文为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样式菜单项列表】的更多相关文章

  1. WijmoJS 中自定义 React 菜单和列表项模板

    WijmoJS 中自定义 React 菜单和列表项模板 在V2019.0 Update2 的全新版本中,React 框架下 WijmoJS 的前端UI组件功能再度增强. WijmoJS的菜单和类似列表 ...

  2. Android菜单项内容大全

    一.介绍: 菜单是许多应用中常见的用户界面组件. Android3.0版本以前,Android设备会提供一个专用"菜单"按钮呈现常用的一些用户操作, Android3.0版本以后, ...

  3. SharePoint 2013:自定义ECB菜单项的添加

    本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xm ...

  4. TortoiseSVN菜单项功能说明

    TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseS ...

  5. JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

    一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include ...

  6. 基于electron+vue+element构建项目模板之【自定义标题栏&右键菜单项篇】

    1.概述 开发平台OS:windows 开发平台IDE:vs code 本篇章将介绍自定义标题栏和右键菜单项,基于electron现有版本安全性的建议,此次的改造中主进程和渲染进程彼此语境隔离,通过预 ...

  7. 添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

    @color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKC ...

  8. 实战android菜单项之XML加载菜单与动态菜单项[转]

    原文地址:http://blog.csdn.net/kaiwii/article/details/7767225 自定义android应用程序的菜单项首先要知道切入点.经过学习,知道主要是两个Acti ...

  9. winform 菜单项显示历史记录 分类: WinForm 2014-07-11 18:15 196人阅读 评论(0) 收藏

    (1)创建一个项目,将其命名为MenuHistory,默认窗体为Form1. (2)从工具箱中向Form1窗体添加MenuStrip控件,同时向窗体添加OpenFileDialog控件.创建一个&qu ...

随机推荐

  1. Python 函数式编程和面向对象编程

    函数式编程 函数:function.函数式:functional,一种编程范式.函数式编程是一种抽象计算机的编程模式.函数!= 函数式(如计算!=计算机) 如下是不同语言的抽象 层次不同   高阶函数 ...

  2. 面试时怎样回答:你对原生ajax的理解

    很多人跟我一样用习惯了jq封装好的$.ajax,但是面试时,原生ajax是很多面试官喜欢问的问题,今天再查资料,打算好好整理一下自己理解的原生ajax. 首先,jq的ajax:一般我常用的参数就是这些 ...

  3. BZOJ_1146_[CTSC2008]网络管理Network_主席树+树状数组

    BZOJ_1146_[CTSC2008]网络管理Network_主席树 Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门 ...

  4. layer的删除询问框的使用

    删除是个很需要谨慎的操作 我们需要进行确认 对了删除一般使用ajax操作 因为如果同url请求 处理 再返回 会有空白页 1.js自带的样式 <button type="button& ...

  5. 我的Python之旅第四天

    一 名称空间.作用域.取值顺序 1 名称空间 当程序运行时,代码从上至下依次执行,它会将变量与值得关系存储在一个空间中,这个空间就叫做名称空间,也叫命名空间.全局名称空间. 当程序遇到函数时,他会将函 ...

  6. 深入理解java虚拟机之java内存区域

    java虚拟机在执行java程序的时候会把它所管理的内存分为多个不同的区域,每个区域都有不同的作用,以及由各自的生命周期,有些随着虚拟机进行的启动而存在,有些区域则依赖于用户线程的启动或结束而建立或销 ...

  7. Windows环境下消息中间件RabbitMq的搭建与应用

    前言 消息中间件目前已经在很多大型的项目上得到了运用,我们常见的有 RabbitMq, activitymq,kafka,rocketmq,其中rocketmq是阿里自己在kafka的基础上用java ...

  8. 干货!分享一款windows下的磁盘分析神器。

    作为开发人员的你,肯定遇到过这样的情况,120G SSD系统盘居然满载了,到底是被哪些程序占用了,包含哪些大文件,这个时候脑袋里就开始回忆了.....这对平时没有养成规范化记录安装软件好习惯的同学而言 ...

  9. 性能测试入门 — LoadRunner 使用初探

    前言: 性能测试是利用产品.人员和流程来降低应用程序.升级程序或补丁程序部署风险的一种手段.性能测试的主要思想是通过模拟产生真实业务的压力对被测系统进行加压,验证被测系统在不同压力情况下的表现,找出其 ...

  10. 图解Java线程的生命周期,看完再也不怕面试官问了

    文章首发自个人微信公众号: 小哈学Java https://www.exception.site/java-concurrency/java-concurrency-thread-life-cycle ...