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 ...
随机推荐
- 开机进入grub命令行之后。。。。
最近由于经常整理自己电脑上的文件,难免都会遇到误删系统文件或者操作失误导致系统不能够正常进入的情况.这时就会出现grub错误的提示,只能输入命令才能进入系统.那么该输入什么命令呢?其实非常简单. gr ...
- 深入讨论channel timeout
深入讨论channel timeout Go 语言的 channel 本身是不支持 timeout 的,所以一般实现 channel 的读写超时都采用 select,如下: select { case ...
- Go缓存DNS
Go里面的DNSclient没有带任何的缓存,语言层面没有任何的缓存,但是我们可以通过下面这样的代码来 这样当我们调用http.Client的时候就会采用这个缓存的ip了,里面用到的dnscache是 ...
- CAD中用户选择实体
在CAD的很多操作中都会有需要用户选择实体的时候,这里将我最近项目中用到的方法分享一下,程序原意是希望用户选择一个单行文本或者多行文本,并返回所选文本的内容,直接上代码: CString CPaint ...
- 在MFC中通过访问IP地址下载文件到本地
void CDownLoad::OnBnClickedOk() { // TODO: 在此添加控件通知处理程序代码 CDialogEx::OnOK(); UpdateData(TRUE); CStri ...
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
- 隐马尔可夫模型(HMM)总结
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项(算法过程,调参等注意事项) 5.实现和具体例子 6.适用场合 内容: 1.算法概述 隐马尔科夫模型(Hidden Markov ...
- [Objective-C语言教程]简介(1)
中文名:扩充C的面向对象编程语言 外文名:Objective-C 简 写:ObjC&OC 创始人:布莱德·考克斯 创始时间:1980年代 Objective-C,通常写作ObjC或OC和较少用 ...
- ASP.NET Core在CentOS上的最小化部署实践
引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个Nginx-Powered AspNet Core Web准生产应用. 在开始之前,我们还是重温一下部署原理,正 ...
- C#-Xamarin利用ZXing.Net.Mobile进行扫码
前言 很多人觉得Xamarin的开源少,没法用来开发项目. 但,实际上Xamarin已经有很多开源代码了:只要不是特别特殊的项目,基本上是都可以满足开发. 下面我们来看一下Xamarin中利用开源代码 ...