android弹出自定义layout菜单,Android:PopWindow — 对Android的底部弹窗、顶部弹窗菜单及自定义界面的使用封装...
转载请注明出处:http://blog..net/hmyang314/article/details/70613478
PopWindow
对Android的底部弹窗,顶部弹窗菜单及自定义界面的使用封装。
GitHub:https://github.com/HMY314/PopWindow
一,介绍
主要是用于在弹窗中显示一些有限的菜单项,也支持添加自定义View,有如下3中弹出方式:
1、底部弹出,主要参考默认风格是参考IOS的UIAlertController,可以添加自定义View;
2、底部弹出,从顶部向下弹出的效果,同时支持控制按钮执行动画,默认是旋转动画;
3、屏幕中间弹出
二,核心类PopWindow
PopWindow采用Build模式,可以像AlertDialog一样方便的使用,通过PopWindowStyle控制弹窗的显示方式:
public enum PopWindowStyle {
PopUp, PopDown, PopAlert
}
控制不同的弹窗的主要类是:PopUpWindow、PopDownWindow、PopAlertDialog
三,使用方法
第一种
PopWindow popWindow = new PopWindow.Builder(this)
.setStyle(PopWindow.PopWindowStyle.PopUp)
.setTitle("注意")
.setMessage("今天天气不错")
.addItemAction(new PopItemAction("选项1"))
.addItemAction(new PopItemAction("选项2", PopItemAction.PopItemStyle.Normal))
.addItemAction(new PopItemAction("选项3", PopItemAction.PopItemStyle.Normal, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "选项3", Toast.LENGTH_SHORT).show();
}
}))
.addItemAction(new PopItemAction("确定", PopItemAction.PopItemStyle.Warning, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();
}
}))
.addItemAction(new PopItemAction("取消", PopItemAction.PopItemStyle.Cancel))
.create();
popWindow.show();
效果图:
第二种
View customView = View.inflate(this, R.layout.layout_test, null);
new PopWindow.Builder(this)
.setStyle(PopWindow.PopWindowStyle.PopDown)
.setIsShowCircleBackground(false)
.addItemAction(new PopItemAction("选项1"))
.addContentView(customView)
.addItemAction(new PopItemAction("选项2"))
.addItemAction(new PopItemAction("取消", PopItemAction.PopItemStyle.Cancel, new PopItemAction.OnClickListener() {
@Override
public void onClick() {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
}))
.setPopWindowMargins(dip2px(10), dip2px(0), dip2px(10), dip2px(0))
.setControlViewAnim(mArrowIv, R.anim.btn_rotate_anim_1, R.anim.btn_rotate_anim_2, true)
.show(view);
效果图:
更多效果请看代码
四,使用封装
在demo中有个PopWindowController类,是对一些特殊的使用进行了再次封装,大家可以根据自己的实际使用情况进行封装。
public class PopWindowController {
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView,
int[] margins, AdapterView.OnItemClickListener listener) {
return showPopDownList(activity, adapter, controlView, rotateView, true, margins, listener);
}
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView,
boolean rotateViewAnim, int[] margins, AdapterView.OnItemClickListener listener) {
Animation openAnim = AnimationUtils.loadAnimation(activity, R.anim.btn_rotate_anim_1);
Animation closeAnim = AnimationUtils.loadAnimation(activity, R.anim.btn_rotate_anim_2);
return showPopDownList(activity, adapter, controlView, rotateView, openAnim, closeAnim, rotateViewAnim, margins, listener);
}
public static PopWindow showPopDownList(Activity activity, BaseAdapter adapter, View controlView, View rotateView, int openAnimId,
int closeAnimId, boolean rotateViewAnim, int[] margins,
AdapterView.OnItemClickListener listener) {
Animation openAnim = AnimationUtils.loadAnimation(activity, openAnimId);
Animation closeAnim = AnimationUtils.loadAnimation(activity, closeAnimId);
return showPopDownList(activity, adapter, controlView, rotateView, openAnim, closeAnim, rotateViewAnim, margins, listener);
}
/**
* 以ListView方式向下弹出框
*
* @param activity
* @param adapter
* @param controlView 操作显示出弹框的按钮
* @param rotateView 要旋转的按钮
* @param openAnim 旋转按钮开启动画
* @param closeAnim 旋转按钮关闭动画
* @param rotateViewAnim 是否显示旋转动画
* @param margins margins[0]:leftMargin、margins[1]:topMargin、margins[2]:rightMargin、margins[3]:bottomMargin
* @param listener
* @return
*/
public static PopWindow showPopDownList(Activity activity, final BaseAdapter adapter, View controlView, View rotateView,
Animation openAnim, Animation closeAnim, boolean rotateViewAnim, int[] margins,
AdapterView.OnItemClickListener listener) {
final ListView listView = new ListView(activity);
listView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
listView.setDivider(null);
listView.setOnItemClickListener(listener);
listView.setAdapter(adapter);
int leftMargin = 0, topMargin = 0, rightMargin = 0, bottomMargin = 0;
if (margins != null) {
for (int i = 0; i < margins.length; i++) {
if (i == 0) {
leftMargin = margins[i];
} else if (i == 1) {
topMargin = margins[i];
} else if (i == 2) {
rightMargin = margins[i];
} else if (i == 3) {
bottomMargin = margins[i];
}
}
}
PopWindow popWindow = new PopWindow.Builder(activity)
.setStyle(PopWindow.PopWindowStyle.PopDown)
.setView(listView)
.setControlViewAnim(rotateView, openAnim, closeAnim, rotateViewAnim)
.setPopWindowMargins(leftMargin, topMargin, rightMargin, bottomMargin)
.create();
popWindow.show(controlView);
return popWindow;
}
}
android弹出自定义layout菜单,Android:PopWindow — 对Android的底部弹窗、顶部弹窗菜单及自定义界面的使用封装...相关推荐
- Android弹出自定义Dialog,android自定义Dialog实现底部弹窗
android自定义Dialog实现底部弹窗 拿到这个需求,很多人都是直接想用popWindow 实现,但是这样的效果我们完全可以根据系统的Dialog 自定义一个. AlertDialog.Buil ...
- Winform像菜单一样弹出自定义内容实现示例
在实际工作中,如果能像菜单一样弹出自定义内容,会方便很多,比如查询时,比如下拉列表显示多列信息时,比如在填写某个信息需要查看一些信息树时.这个时候自定义弹出界面就显的非常重要了 我这里其实用到的是网上 ...
- 对div实现右键弹出自定义菜单
实现只对蓝色的Div弹出自定义菜单,其他位置弹出默认的浏览器菜单 js代码如下: <script type="text/javascript">$(function() ...
- QT TextEdit设置背景、明文加密、弹出网站、弹出自定义对话框、gif动态图片、程序启动动画、打包程序、关闭事件
TextEdit设置背景 前提必须已添加了资源图片 铭文加密 ui->passLineEdit->setEchoMode(QLineEdit::Password); 弹出网站 #inclu ...
- 【WPF】右下角弹出自定义通知样式(Notification)——简单教程
[WPF]右下角弹出自定义通知样式(Notification)--简单教程 原文:[WPF]右下角弹出自定义通知样式(Notification)--简单教程 1.先看效果 2.实现 1.主界面是Mai ...
- wpf 点击按钮弹出新对话框_WPF弹出自定义窗口的方法
本文实例讲述了WPF弹出自定义窗口的方法.分享给大家供大家参考,具体如下: 测试环境: [1]VS2010SP1 [2]WPF(.NET Framework 4)项目 内容简介 WPF工程如何弹出自定 ...
- android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)
在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...
- android shape 底部线,android用shape给linearLayout设置边框,怎样只保留底部或顶部的边框,把其它三个方向的边框去掉呢?...
http://bbs.csdn.net/topics/390485215 这种方法只是两个颜色块相减而已 android:top="1dp" android:left=" ...
- 弹出html对话框样式,对话框或弹出自定义样式的3种方法
1.使用Activity实现 在AndroidManifest.xml中修改Actity的主题android:theme="@style/MyDialogStyleBottom" ...
最新文章
- bash 运行程序 下一步_怎样用 Bash 编程:语法和工具
- Andorid中的HAL
- JavaScript常用DOM集合
- Linux——挖矿病毒(sysupdate, networkservice进程)清除解决方案
- 人一生中最大的遗憾应该是什么
- mybatis源码学习篇之——执行流程分析
- 微服务 java9模块化_Java9系列第8篇-Module模块化编程
- python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
- 设置、获得对话框中 编辑框控件 EDIT 的内容
- ViT (Vision Transformer) ---- Transformer Model(1)
- Acrobat Pro DC 教程,如何拆分PDF文件?
- Java并发编程基础-锁-synchronized状态变换
- cmw500 lte非信令测试_买CMW500,信令与非信令的含义?功能?
- Java毕业设计(项目课程)大全
- [计算机数值分析]拉格朗日插值公式
- 红昭愿计算机音乐教程,红昭愿 - 音阙诗听 - 5SING中国原创音乐基地
- linux修改文件:E212 can't open file for writing
- mysql的填充因子_数据库的索引和填充因子fillfactor
- Android应用在新浪微博授权提示:文件不存在 C8998 的解决方法
- excel的主要功能_免费的Excel共享编辑办公软件,表格权限-套打模板样样有,附下载...