弹出窗体用于提示用户的进一步操作可能会带来的影响,是用户与项目进行交互不可或缺的组件之一。

Android官方为我们提供了AlertDialog,可以通过调用Builder方法的方式来使用,虽然AlertDialog也提供了多种自定义样式,但面对某些需求还是显得捉襟见肘。

比如这样:



    这种情况就不得不采用一些特殊手段了,比如自定义Activity,自定义PopuWindow等等,今天我们就先来了解一下继承于PopuWindow的自定义弹出窗体的使用方法。

首先,我们需要建立一个xml文件作为窗体布局,也就是把要显示的内容绘制出来

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:gravity="center"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:id="@+id/pop_layout"android:background="@color/white"android:gravity="center"android:orientation="vertical"android:layout_width="260dp"android:layout_height="230dp"><ImageViewandroid:src="@drawable/bell"android:layout_width="90dp"android:layout_height="90dp" /><TextViewandroid:layout_marginTop="5dp"android:text="确定开始考试?"android:textColor="@color/app_blue"android:textSize="@dimen/font_size_16"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextViewandroid:layout_marginTop="5dp"android:text="点击确定后将开始计时。"android:textColor="@color/app_text_gray"android:textSize="@dimen/font_size_14"android:layout_width="wrap_content"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_marginTop="30dp"android:gravity="center"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/no"android:text="取消"android:textColor="@color/white"android:background="@color/app_red"android:layout_width="80dp"android:layout_height="30dp" /><Buttonandroid:id="@+id/sure"android:layout_marginLeft="30dp"android:text="确定"android:textColor="@color/white"android:background="@color/app_blue"android:layout_width="80dp"android:layout_height="30dp" /></LinearLayout></LinearLayout>
</LinearLayout>

效果大概是这个样子:

    需要注意的是继承与PopuWindow的弹出窗体布局似乎不支持padding,也就是说无论你是padding还是paddingLeft/Right/Top/Bottom都是无效的,
所以我在布局里加入了一些规定长宽的数值,当然这对于开发来说简直是耻辱(捂脸)。
    布局完毕,接下来我们创建一个类来建立起他的工作流程:
/*** Coder: PanZhe on 2016/9/23.* Email: zhepan@outlook.com*/public class CustomPopuWindow extends PopupWindow {private Button no,sure;private View window;public CustomPopuWindow(Activity context, View.OnClickListener listener){super(context);LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);window = inflater.inflate(R.layout.custom_dilog_testing, null);no = (Button)window.findViewById(R.id.no);sure = (Button)window.findViewById(R.id.sure);no.setOnClickListener(listener);sure.setOnClickListener(listener);//设置SelectPicPopupWindow的Viewthis.setContentView(window);//设置SelectPicPopupWindow弹出窗体的宽this.setWidth(ViewGroup.LayoutParams.FILL_PARENT);//设置SelectPicPopupWindow弹出窗体的高this.setHeight(ViewGroup.LayoutParams.FILL_PARENT);//设置SelectPicPopupWindow弹出窗体可点击this.setFocusable(true);//设置SelectPicPopupWindow弹出窗体动画效果
//        this.setAnimationStyle(R.style.AnimBottom);//实例化一个ColorDrawable颜色为半透明ColorDrawable dw = new ColorDrawable(0xb0000000);//设置SelectPicPopupWindow弹出窗体的背景this.setBackgroundDrawable(dw);//mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框window.setOnTouchListener(new View.OnTouchListener() {public boolean onTouch(View v, MotionEvent event) {int height = window.findViewById(R.id.pop_layout).getTop();int y=(int) event.getY();if(event.getAction()==MotionEvent.ACTION_UP){if(y<height){dismiss();}}return true;}});}
}<strong>
</strong>

实际上也没啥太高深的东西,引用一下布局,为两个按钮传入单击事件,设置弹出窗体的属性和效果,最后为窗体外的部分设置点击销毁窗体,OK,大功告成。

    在需要的地方调用窗体:
CustomPopuWindow customPopuWindow = new CustomPopuWindow(getActivity(),listener);
customPopuWindow.showAtLocation(getActivity().findViewById(R.id.main), Gravity.CENTER | Gravity.CENTER_HORIZONTAL, 0, 0);
    new CustomPopuWindow(Activity,this,View.OnClickListner); 实例化的方法需要传入当前活动的上下文和单击事件监听,
    而showAtLoacation方法需要传入的是将要显示页面布局上的一个控件,以此作为索引来显示弹出窗体,也就是我代码中的R.id.main。
    至于后面的Gravity.CENTER则是窗体将要显示的位置,有多种情况可选,适用与下方弹出,中间弹出等等。最后一个变量是对齐方式和偏移量,再次就不多介绍了。
    最后是被传入的单击事件写法:
    private View.OnClickListener listener = new View.OnClickListener() {@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.no:customPopuWindow.dismiss();break;case R.id.sure:customPopuWindow.dismiss();//当点击确定按钮时将执行的动作break;}}};

是不是很简单的样子?(滑稽)


Android 继承于PopuWindow的自定义弹出窗体相关推荐

  1. android 浮层菜单弹出,Android PopupWindow实现微信右上角的弹出菜单

    日常开发过程中对于PopupWindown的使用也是比较多的.这里给大家展示一下PopupWindow的使用. 修改activity_main.xml布局: xmlns:tools="htt ...

  2. android自定义弹出框样式实现

    前言: 做项目时,感觉Android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个. 废话不说先上图片: 实现机制 1.先自定义一个弹出框的样式 2.自己实现CustomD ...

  3. android弹出框自定义按钮,安卓(kotlin)自定义弹出框

    在安卓开发中,我们经常会遇到这种情况,就是可爱的UI们设计了一套属于我们自己风格的弹出框,为了彰显我们自己的风格,使用自动的dialog当然满足不了我们的需求,所以还是得这基础上写出我们自己的提示框, ...

  4. android自定义弹出对话框,使用FlyDialog实现自定义Android弹窗对话框

    前言 学习的时候要用到弹窗,但是又觉得i同自带的弹窗样式有点不太美观,搜索资料后发现了FlycoDialog这个开源库,效果很好,而且实现起来也比较方便. 先列举一些比较好看的效果: NormalLi ...

  5. android 自定义 popupwindow,Android自定义弹出窗口PopupWindow使用技巧

    PopupWindow是Android上自定义弹出窗口,使用起来很方便. PopupWindow的构造函数为 public PopupWindow(View contentView, int widt ...

  6. Android监听系统输入法键盘弹出显示与隐藏事件

    Android监听系统输入法键盘弹出显示与隐藏事件 有时候需要监听Android系统输入法的弹出显示事件,比如:微信聊天时,不管你当前在聊天中的什么位置(上滑查看消息历史),每当你点击输入框时,都会自 ...

  7. [Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

        这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同 ...

  8. 所有网站都通用的自定义弹出框alert

    A.所有网站都通用的自定义弹出框.A </body> <script>var Alert = function(data){//没有数据则返回if(!data){return; ...

  9. android h5弹窗,Android嵌套html5页面中alert 弹出框问题

    最近项目中遇到一个头疼的问题,那就是在安卓里嵌套html5的时候发现alert弹出框出现了问题 那就是弹出的时候会出现串 来自http://xxxxx 网页的提示 然后下面出来具体的弹出信息,还有更奇 ...

  10. JavaScript - JavaScript自定义弹出对话框

    本脚本使用自定义的浮动窗口替代浏览器自己的对话框,效果非常不错.包含Error | Warning | Success | Prompt 四个对话框窗口 兼容性:IE6+ FireFox2+ Oper ...

最新文章

  1. CV 面试问题详解宝典—目标检测篇
  2. 【机器学习】在机器学习中处理大量数据!
  3. 杭电ACM_1016_素数环
  4. 数据结构之树、森林、二叉树的转化
  5. 【C语言重点难点】数据类型、常量和变量
  6. Ubuntu 13.04开机亮度调节
  7. mybatis select 返回值long null_Mybatis框架(二)
  8. 用Rainbond快速实现企业云原生
  9. jfinal后台获取权限树,以供前台展示
  10. HighCharts:plotLines基准线与数据相差过大不显示
  11. cimage和gdi绘图效率比较_使用MFC CImage类和GDI+ Image加载并绘制PNG图片
  12. ie加载项存在残留是什么_残余IE加载项无法修复
  13. confluence挖矿病毒(kdevtmpfsi 、solrd)解决
  14. Android P 音频焦点管理
  15. 我的北京生活,2018面向新的开始
  16. JKD+Tomcat+Eclipse基础配置
  17. opencv4使用sift以及surf
  18. 【Java】JDK目录介绍
  19. 怎么判断数字n是否为2的x次方,即2的幂次呢,比如2,4,8,16,32
  20. 服务器win2003的远程在哪里,走进win2003远程桌面的神奇世界

热门文章

  1. LD文本相似度算法的在实际业务中的使用
  2. Matlab求一阶导数
  3. Ajax传递二维数组至后台ThinkPHP控制器
  4. AI穿墙而过?MIT最新研究发现AI能跟踪行动轨迹
  5. 上海拍照攻略,让你的朋友圈与众不同
  6. yigo基础学习笔记2
  7. centos6如何配置ip
  8. 什么是PBR?pbr入门基础干货
  9. 从play_mp3例程出发理解ESP32-ADF的使用方法
  10. SHH could not initialize proxy - the owning Session was closed 和延迟加载问题