转载请注明出处: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的底部弹窗、顶部弹窗菜单及自定义界面的使用封装...相关推荐

  1. Android弹出自定义Dialog,android自定义Dialog实现底部弹窗

    android自定义Dialog实现底部弹窗 拿到这个需求,很多人都是直接想用popWindow 实现,但是这样的效果我们完全可以根据系统的Dialog 自定义一个. AlertDialog.Buil ...

  2. Winform像菜单一样弹出自定义内容实现示例

    在实际工作中,如果能像菜单一样弹出自定义内容,会方便很多,比如查询时,比如下拉列表显示多列信息时,比如在填写某个信息需要查看一些信息树时.这个时候自定义弹出界面就显的非常重要了 我这里其实用到的是网上 ...

  3. 对div实现右键弹出自定义菜单

    实现只对蓝色的Div弹出自定义菜单,其他位置弹出默认的浏览器菜单 js代码如下: <script type="text/javascript">$(function() ...

  4. QT TextEdit设置背景、明文加密、弹出网站、弹出自定义对话框、gif动态图片、程序启动动画、打包程序、关闭事件

    TextEdit设置背景 前提必须已添加了资源图片 铭文加密 ui->passLineEdit->setEchoMode(QLineEdit::Password); 弹出网站 #inclu ...

  5. 【WPF】右下角弹出自定义通知样式(Notification)——简单教程

    [WPF]右下角弹出自定义通知样式(Notification)--简单教程 原文:[WPF]右下角弹出自定义通知样式(Notification)--简单教程 1.先看效果 2.实现 1.主界面是Mai ...

  6. wpf 点击按钮弹出新对话框_WPF弹出自定义窗口的方法

    本文实例讲述了WPF弹出自定义窗口的方法.分享给大家供大家参考,具体如下: 测试环境: [1]VS2010SP1 [2]WPF(.NET Framework 4)项目 内容简介 WPF工程如何弹出自定 ...

  7. android类中定义颜色,自定义实现简单的Android颜色选择器(附带源码)

    在写Android App过程中需要一个简单的颜色选择器,Android自带的ColorPicker和网上的一些ColorPicker都太高端了,都实现了颜色渐变功能,我要的不需要那么复杂,只想提供几 ...

  8. android shape 底部线,android用shape给linearLayout设置边框,怎样只保留底部或顶部的边框,把其它三个方向的边框去掉呢?...

    http://bbs.csdn.net/topics/390485215 这种方法只是两个颜色块相减而已 android:top="1dp" android:left=" ...

  9. 弹出html对话框样式,对话框或弹出自定义样式的3种方法

    1.使用Activity实现 在AndroidManifest.xml中修改Actity的主题android:theme="@style/MyDialogStyleBottom" ...

最新文章

  1. bash 运行程序 下一步_怎样用 Bash 编程:语法和工具
  2. Andorid中的HAL
  3. JavaScript常用DOM集合
  4. Linux——挖矿病毒(sysupdate, networkservice进程)清除解决方案
  5. 人一生中最大的遗憾应该是什么
  6. mybatis源码学习篇之——执行流程分析
  7. 微服务 java9模块化_Java9系列第8篇-Module模块化编程
  8. python 调用gpu算力_数据科学家需要算力,GPU 如何实现?-控制器/处理器-与非网...
  9. 设置、获得对话框中 编辑框控件 EDIT 的内容
  10. ViT (Vision Transformer) ---- Transformer Model(1)
  11. Acrobat Pro DC 教程,如何拆分PDF文件?
  12. Java并发编程基础-锁-synchronized状态变换
  13. cmw500 lte非信令测试_买CMW500,信令与非信令的含义?功能?
  14. Java毕业设计(项目课程)大全
  15. [计算机数值分析]拉格朗日插值公式
  16. 红昭愿计算机音乐教程,红昭愿 - 音阙诗听 - 5SING中国原创音乐基地
  17. linux修改文件:E212 can't open file for writing
  18. mysql的填充因子_数据库的索引和填充因子fillfactor
  19. Android应用在新浪微博授权提示:文件不存在 C8998 的解决方法
  20. excel的主要功能_免费的Excel共享编辑办公软件,表格权限-套打模板样样有,附下载...

热门文章

  1. 学习记录——微信小程序查询的两种方法
  2. 文件被清理了怎么恢复
  3. 关于android的nfc问题 Ultralight c (通用卡)
  4. sql 查询之排除某种特定的数据
  5. 【css】渐变-背景渐变、边框渐变、文字渐变
  6. 十种能毁掉你一生职场生涯的心态
  7. 习题5-7 使用函数求余弦函数的近似值 (15 分)
  8. TP、FN、TN、TP详解
  9. 我看:“不患寡而患不均” 以及 “饥寒起盗心”
  10. VLDB 2010 论文写作和格式 format 投稿