android开发步步为营之51:弹出窗及遮罩层的几种实现方式

需要做一个弹出窗或者遮罩层,我们一般有以下几种思路。

1、AlertDialog对话框

2、PopupWindow弹出窗

3、WindowManager动态添加View到当前页面

4、打开另外一个Activity

下面分别给出这几种方法的实现栗子。

一、AlertDialog

适合需要用户做出选择,或者确认的弹出小窗

AlertDialog.Builder dialog = new AlertDialog.Builder(TestActivity.this);

//自定义

//dialog.setView(LayoutInflater.from(TestActivity.this).inflate(R.layout.layout_dialog, null));

dialog.setTitle("Do you like Android?");

dialog.setNegativeButton("No", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.dismiss();

}

});

dialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Toast.makeText(TestActivity.this, "you choose yes", Toast.LENGTH_SHORT).show();

dialog.dismiss();

}

});

dialog.show();

二、PopupWindow

适合做遮罩页面

final PopupWindow popup = new PopupWindow(TestActivity.this);

View popView = LayoutInflater.from(TestActivity.this).inflate(R.layout.popuptest, null);

popup.setContentView(popView);

popup.setFocusable(true);

DisplayMetrics metric = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metric);

int width = metric.widthPixels; // 屏幕宽度(像素)

int height = metric.heightPixels; // 屏幕高度(像素)

popup.setWidth(Integer.parseInt(new DecimalFormat("0").format(width * 0.8)));

popup.setHeight(Integer.parseInt(new DecimalFormat("0").format(height * 0.8)));

popup.showAtLocation(TestActivity.this.findViewById(R.id.btnDialog), Gravity.CENTER, 0, 0);

popView.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

popup.dismiss();

}

});

三、WindowManager

适合弹出带动画的小窗

//WindowManager

View vRating;

try {

vRating = LayoutInflater.from(TestActivity.this).inflate(R.layout.layout_rating, null);

} catch (Exception e) {

return;

} catch (OutOfMemoryError e) {

return;

}

//设置页面属性

WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();

layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;

layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;

layoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN

| WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;

//        layoutParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN

//                | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS| WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;

layoutParams.format = PixelFormat.TRANSLUCENT;

//        layoutParams.type = WindowManager.LayoutParams.TYPE_TOAST;

layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;

layoutParams.x = 0;

layoutParams.y = 0;

final WindowManager wm = (WindowManager) TestActivity.this.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

wm.addView(vRating, layoutParams);

final View negativeButton = vRating.findViewById(R.id.negativeButton);

negativeButton.setOnClickListener(new OnClickListener() {

//to do

});

}

final View positiveButton = vRating.findViewById(R.id.positiveButton);

positiveButton.setOnClickListener(new OnClickListener() {

//to do

});

四、Activity

适合做透明遮罩页面,实现原理是跳转到另外一个Activity  A后,再延时跳出一个Activity B,这样后面的B就会遮住前面的A。

//Activity

final Handler handler = new Handler();

Runnable runnable = new Runnable() {

@Override

public void run() {

Intent intent = new Intent(TestActivity.this, DialogActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

TestActivity.this.startActivity(intent);

}

};

handler.postDelayed(runnable, 500L);

时间: 2024-11-05 18:36:57

android开发步步为营之51:弹出窗及遮罩层的几种实现方式的相关文章

点击弹出居中的遮罩层,背景变暗

点击弹出层特效代码,网页上已经有很多类似的代码了,使用挺广泛的,代码先判断浏览器的版本,ie6创建的div样式和非ie6创建的div样式在解析时有点区别,为了兼容性考虑,才加了判断,虽然实现的有点粗糙,不过从实现的方法来说,容易理解,便于修改完善. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio

element-ui 弹出框在遮罩层下面

title: element-ui 弹出框在遮罩层下面 date: 2020-03-18 11:37:45 tags: elementUI 给 <el-dialog></el-dialog>添加:modal-append-to-body="false"属性 <el-dialog title="提示" :visible.sync="isDialogShow" :modal-append-to-body="fa

Android开发遇到手机无法弹出Toast

今天遇到了一个很奇怪的问题,一个很简单的程序,就是点击按钮弹出一个Toast,但在手机上运行起来,却没有正常弹出Toast 第一反应就是看看是否调用了show方法,很显然,并不是这个低级问题,为了确定范围,使用另一部手机运行了一下,结果正常弹出了Toast 这样问题就基本明确了,手机问题!!! 费劲一番周折后,找到了解决的方法,在手机的设置 -> (某些手机前面可能有一项安全与隐私)通知中心 -> 将所运行的应用的状态栏开启就ok了

easyui弹出加载遮罩层(转)

//弹出加载层 function load() { $("<div class=\"datagrid-mask\"></div>").css({ display: "block", width: "100%", height: $(window).height() }).appendTo("body"); $("<div class=\"datagrid-m

微信小程序弹出和隐藏遮罩层动画以及五星评分

参考源码: http://www.see-source.com/weixinwidget/detail.html?wid=82 https://blog.csdn.net/pcaxb/article/details/56276180 https://developers.weixin.qq.com/miniprogram/dev/api/api-animation.html train.wxml <view class='train_con'> <view class='head'>

Android应用之——百度地图最新SDK3.0应用,实现最常用的标注覆盖物以及弹出窗覆盖物

一.概述 最新版的百度地图SDK3.0,修改了很多方法,之前的很多方法被简化了,正好在做地图这一块,顺便就使用了最新版的sdk. 下载官方给的demo,发现变化还是挺大的,之前的一些方法都换了,地图的初始化也进行了调整.多了好几个类,具体用法参考下面的例子,详细的说明可参照官方的说明文档. 二.效果图 标注覆盖物效果图: 弹出窗覆盖物: 三.实现过程 大部分是根据官方给的demo来的. A.配置文件: 第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

DuiVision开发教程(18)-弹出窗

DuiVision的弹出窗口类CDlgPopup,是菜单.下拉列表等控件的父类,也可以单独使用,用于创建弹出窗口,弹出窗口默认是非激活状态下自动关闭,例如鼠标点击到弹出窗口外面的区域,弹出窗口就会自动关闭,也可以设置为不自动关闭. 通用的弹出窗口一般通过对话框的OpenDlgPopup函数创建. 弹出窗的属性说明如下: 属性名 类型 说明 width 数字 窗口宽度 height 数字 窗口高度 bkimg 字符串 窗口的背景图片,如果指定了就使用指定的背景图片,否则使用全局设置的背景图片 bk

android开发步步为营之69:Activity通过设置Theme模拟对话框效果

对话框应该说是手机app中最常见的和用户进行交互的方式了,之前也总结过一下,主要通过popupwindow,dialog,windowmanger来实现,本文详细介绍一下如何通过Activity实现弹出对话框效果. 来先看下效果,有个感性的认识. 中间那个提示其实是一个activity,好的,下面开始一步步实现这个神奇的效果.   第一步:设计对话框页面activity_simulate_dialog.xml <span style="font-size:14px;">&l