区别:AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
其实PopupWindow在设置了背景图片以后,同样可以点击背景消失.
问题:有个问题一直没有解决,当PopupWindow有背景图片,并且带了动画效果以后,isShowing()会有异常情况出现.
关于这块,专门敲了一些示例代码,之前一阵子很疑惑有些PopupWindow带一个小箭头,有些就没有,研究之后才发现原来是背景图片的原因,瞬间就醉了- - .//
alertdialg
PopupWindow_noimgActivity 没有图片
带图片
其实PopupWindow在设置了背景图片以后,同样可以点击背景消失.
问题:有个问题一直没有解决,当PopupWindow有背景图片,并且带了动画效果以后,isShowing()会有异常情况出现.
关于这块,专门敲了一些示例代码,之前一阵子很疑惑有些PopupWindow带一个小箭头,有些就没有,研究之后才发现原来是背景图片的原因,瞬间就醉了- - .//
alertdialg
@Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.pop_no_img_a://系统自带 // 简单的android AlertDialog new AlertDialog.Builder(this) .setTitle("标题") .setMessage("简单消息框") .setPositiveButton("确定", null) .show(); break; case R.id.pop_no_img_b://自定义 final AlertDialog alertDialog = new AlertDialog.Builder(this).create(); alertDialog.show(); Window window = alertDialog.getWindow(); window.setGravity(Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL); //设置透明度 WindowManager.LayoutParams lp = window.getAttributes(); lp.alpha = 0.6f; window.setContentView(R.layout.activity_alertdialog); break; case R.id.pop_no_img_c://自定义附带动画 final AlertDialog alertDialog1 = new AlertDialog.Builder(this).create(); alertDialog1.show(); Window window1 = alertDialog1.getWindow(); window1.setGravity(Gravity.TOP); window1.setWindowAnimations(R.style.AnimationFade);//动画效果 window1.setContentView(R.layout.activity_alertdialog); break; default: break; } }
PopupWindow_noimgActivity 没有图片
package com.example.activity; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.PopupWindow; import android.widget.Toast; import com.example.dialogandpopupwindow.R; import com.example.myview.MyButton; public class PopupWindow_noimgActivity extends Activity implements OnClickListener{ private View view; private PopupWindow popupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pop_no_img); initPopUpWindow(); findViewById(R.id.pop_no_img_a).setOnClickListener(this); findViewById(R.id.pop_no_img_b).setOnClickListener(this); findViewById(R.id.pop_no_img_c).setOnClickListener(this); } @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.pop_no_img_a: if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAsDropDown(arg0); } break; case R.id.pop_no_img_b: if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAsDropDown(arg0, 50, 100); } break; case R.id.pop_no_img_c: if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAtLocation(findViewById(R.id.pop_no_main) , Gravity.CENTER, 0, 0); } break; case R.id.pop_no_mubut1: Toast.makeText(this, "删除", Toast.LENGTH_LONG).show(); break; case R.id.pop_no_mubut2: Toast.makeText(this, "网络", Toast.LENGTH_LONG).show(); break; default: break; } } private void initPopUpWindow() { view = this.getLayoutInflater().inflate(R.layout.pop_no_img, null); popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); MyButton myButton = (MyButton) view.findViewById(R.id.pop_no_mubut1); myButton.setImageSource(R.drawable.menu_delete); myButton.setTextview("删除"); myButton.setOnClickListener(this); MyButton myButton1 = (MyButton) view.findViewById(R.id.pop_no_mubut2); myButton1.setImageSource(R.drawable.menu_net); myButton1.setTextview("网络"); myButton1.setOnClickListener(this); } }
带图片
package com.example.activity; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.PopupWindow; import android.widget.Toast; import com.example.dialogandpopupwindow.R; import com.example.myview.MyButton; public class PopupWindow_withimgActivity extends Activity implements OnClickListener{ private View view; private PopupWindow popupWindow; private Button but1,but2,but3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pop_no_img); initPopUpWindow(); but1 = (Button) findViewById(R.id.pop_no_img_a); but2 = (Button) findViewById(R.id.pop_no_img_b); but3 = (Button) findViewById(R.id.pop_no_img_c); but1.setOnClickListener(this); but1.setText("控件下方显示"); but2.setOnClickListener(this); but2.setText("侧滑出现退出"); but3.setOnClickListener(this); but3.setText("中间出现消失"); } @Override public void onClick(View arg0) { switch (arg0.getId()) { case R.id.pop_no_img_a: if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAsDropDown(arg0); } break; case R.id.pop_no_img_b: popupWindow.setAnimationStyle(R.style.AnimationFade); if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAsDropDown(arg0, 50, 100); popupWindow.update(); } break; case R.id.pop_no_img_c: popupWindow.setAnimationStyle(R.style.AnimationPpo); if(popupWindow.isShowing()){ popupWindow.dismiss(); }else{ popupWindow.showAtLocation(findViewById(R.id.pop_no_main) , Gravity.CENTER, 0, 0); popupWindow.update(); } break; case R.id.pop_no_mubut1: Toast.makeText(this, "删除", Toast.LENGTH_LONG).show(); break; case R.id.pop_no_mubut2: Toast.makeText(this, "网络", Toast.LENGTH_LONG).show(); break; default: break; } } private void initPopUpWindow() { view = this.getLayoutInflater().inflate(R.layout.pop_no_img, null); popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); MyButton myButton = (MyButton) view.findViewById(R.id.pop_no_mubut1); myButton.setImageSource(R.drawable.menu_delete); myButton.setTextview("删除"); myButton.setOnClickListener(this); MyButton myButton1 = (MyButton) view.findViewById(R.id.pop_no_mubut2); myButton1.setImageSource(R.drawable.menu_net); myButton1.setTextview("网络"); myButton1.setOnClickListener(this); // 控制popupwindow点击屏幕其他地方消失 // 设置背景图片,不能在布局中设置,要通过代码来设置 popupWindow.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.bg_popupwindow)); // 触摸popupwindow外部,popupwindow消失。这个要求你的popupwindow要有背景图片才可以成功,如上 popupWindow.setOutsideTouchable(true); } }
- DialogAndPopupwindow.zip (1.4 MB)
- 下载次数: 5
发表评论
-
2048源码(核心算法有,缺少几个anctionbar,以后补上)
2014-09-25 13:22 15292048游戏基本上有四部分组成, 1:主activity,包含 ... -
android动画效果
2014-09-24 18:06 1147前几天弄alertdialog和popupwindow的时候, ... -
基础篇--resources资源
2014-09-12 15:18 539最近一直在做java开发,偶尔敲点android代码,突然发现 ... -
多点触摸(图片缩放为例)
2014-09-01 17:22 656多点触摸的事件跟单点是大同小异的,上个图片缩放的代码,供大家参 ... -
Toast的多种样式(附带Notification)
2014-09-01 13:48 943Toast以前用的时候一直以为只有文字提示,偶然得知也有多种样 ... -
Android Adapter详解(2)
2014-08-15 14:05 10以前Adapter一直用的不是太好,经过长时间的浸淫,现在可以 ... -
BroadcastReceiver简介
2014-08-14 16:27 674BroadcastReceiver作为四大 ... -
关于Android的Service
2014-08-14 13:57 464说起来真是羞愧,以前手机经常开机的时候,不会有任何QQ消息通知 ... -
在开发过程中易出的错误
2014-08-13 16:53 4191:如果继承ListActivity,那么layout中必须有 ... -
多媒体的浅尝辄止
2014-08-12 15:57 537下面简单讲几种Android的多媒体技术,音频,视频,摄像头, ... -
Sqlite无脑使用
2014-08-11 14:56 889不会sqlite的人再也不用愁了,无脑使用,只要会粘贴复制就O ... -
android弹出框
2014-08-11 11:23 519不得不说,android自带的弹出框真心丑,而且还不好用,接下 ... -
android几种数据存储方式
2014-08-11 10:45 712android数据存储方式 1:SharedPreferen ... -
SQLiteOpenHelper和ContentProvider区别
2014-08-06 15:08 1440Android中操作数据库主要有两种方法:使用SQLiteOp ... -
xml文件解析SAX
2014-08-05 13:45 504xml文件解析:xml文件解析有四种方式, 1.DOM生成和解 ... -
Android不常用代码(1)
2014-07-31 18:07 545目录 1:Webview 2:js交互 1:Web ... -
系统窗口的调用
2014-07-31 15:46 471直接上代码吧,intent进行调用 @Override ... -
fragment简单实用及数据传递(2)
2014-07-31 15:13 2551FragmentTransaction 进行数据传递 imp ... -
ActionBar简介
2014-07-31 10:47 714Action bar是一个标识应用程序和用户位置的窗口功能,并 ... -
fragment简单实用及数据传递(1)
2014-07-30 16:29 739Fragment的使用相关 使用Fragment时,需要继承 ...
相关推荐
本文将详细讲解两种类型的对话框:AlertDialog和PopupWindow,并探讨它们的区别和使用场景。 首先,我们来看**AlertDialog**。AlertDialog是Android系统提供的一种标准对话框,它非阻塞式的特性意味着当对话框显示...
AlertDialog 和 PopupWindow 两者最主要的区别就是显示的位置问题:AlertDialog 在位置显示上是固定的,而 PopupWindow 相对比较随意,能够在主屏幕的任意位置显示。 二、效果图 在本文中,我们将实现一个简单的 ...
AlertDialog是系统提供的标准对话框,它提供了固定的样式和行为,而PopupWindow则更为灵活,允许开发者自定义布局和行为,可以实现各种定制化的弹出效果。 在描述中提到的"动画效果非常不错",这涉及到Android的...
有时我们需要在`AlertDialog`中使用`PopupWindow`来实现更复杂的交互,例如下拉菜单或滑动选择器。以下是一个简单的`PopupWindow`使用示例: ```java View popupView = LayoutInflater.from(context).inflate(R....
在Android开发中,`Dialog`和`PopupWindow`是两种常用的弹出式界面组件,用于在用户进行操作时提供额外信息或交互。本教程将详细讲解这两种组件的使用方法及其区别,适合初学者掌握。 首先,`Dialog`是Android系统...
在Android开发中,Dialog和PopupWindow是两种常用的用于创建弹出式界面的组件。它们都可以实现底部弹出的效果,但有着不同的特性和使用场景。在本篇内容中,我们将深入探讨如何利用Dialog和PopupWindow来实现底部弹...
与AlertDialog相比,PopupWindow更灵活,能够自定义更多的样式和交互方式。 2. 功能特性 - 可以在屏幕任意位置显示:PopupWindow的位置可以通过设置x、y坐标进行控制。 - 自定义内容:PopupWindow可以显示任何View...
相比AlertDialog,PopupWindow提供了更大的灵活性,尤其是在定位和设计方面。在本文中,我们将深入探讨PopupWindow的使用、功能以及如何实现各种自定义效果。 首先,PopupWindow的核心优势在于其定位的灵活性。它...
与 AlertDialog 不同,PopupWindow 具有更多的自定义性和控制权,允许开发者实现更复杂的布局和交互设计。本知识点主要探讨如何调整 PopupWindow 底部弹出时的透明度。 在 Android 中,PopupWindow 的透明度主要...
在Android开发中,`Menu`和`AlertDialog`是两种重要的用户交互界面元素,它们用于提供不同的功能选项给用户。在本篇文章中,我们将深入探讨这两个组件的使用、工作原理以及如何在实际应用中进行有效集成。 `Menu`是...
DialogFragment,解决PopupWindow中EditText无法复制粘贴问题。Blog地址:https://blog.csdn.net/qq_37077360/article/details/83505119
与标准的AlertDialog不同,PopupWindow可以自定义大小、位置,甚至可以设置背景透明,使得它能够无缝融入到应用界面中。此外,PopupWindow的内容可以是任何View,如自定义布局、ListView或RecyclerView,这样就能...
它提供了比`AlertDialog`和`Toast`更强大的定制能力,后者通常用于简单警告和信息显示。 - **自定义视图**:`PopupWindow`支持任意的视图作为其内容,这意味着你可以完全控制弹出窗口的外观和行为。 - **位置灵活性...
为什么android系统有AlertDialog,PopupWindow对话框,基本满足客户需求,为啥还要跑出一个DialogFragment对话框呢?这就要从DialogFragment的优点说起了:
PopupWindow在Android开发中是一种非常实用的控件,它能够以弹出窗口的形式展示内容,通常用于实现下拉菜单、提示信息或者简单的交互界面。在本文中,我们将深入探讨PopupWindow的实现原理、常见问题以及解决方案。 ...
AlertDialog与Windows编程中的Dialog有所不同,因为它是非阻塞的,这意味着它不会阻止用户与应用程序的其他部分进行交互,而PopupWindow则用于创建阻塞式的对话框。 在Android入门第九篇中,讲解了如何使用...
这个实例展示了`PopupWindow`的使用方法,包括创建布局、实例化`PopupWindow`、设置显示位置和处理点击事件。在实际应用中,可以根据需求进行更复杂的定制,例如添加动画效果、改变菜单项的样式等。