关于安卓alertdialog你能用到的都在这里了(进出动画,显示位置,背景,设置内容,是否可以点击其他地方消失,屏幕不变暗)
2016-05-05 17:39
696 查看
alerdialog在安卓中是一个轻量级的弹出框,使用非常方便,但是有的时候我们需要让它实现更加复杂一下的功能,可能我们需要它从左边弹出,从右边弹出,从下边消失等等,今天我们来实现一下
首先看看一个alertdialog怎么写:
对了,这么控制这个dialog的大小呢?
我们看到很多app中从顶部弹出一个dialog,然而退出的时候从底部退出,甚至从底部弹出,一直贴着底部,消失的时候又缩回去了,非常神奇,这个怎么实现呢?先看一段代码吧首先感谢这位仁兄:点击打开链接多有参考,先在之前的代码上加上这一句;
看到这个地方,上面引用了两个animation文件,dialog_appear和dialog_disappear,下面我们创建这两动画文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="100.0%p" />
<alpha
android:duration="500"
android:fromAlpha="0.5"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
这两个动画文件是相同的,内容都是上面的内容,解释一下,这个动画文件中有两个动画组成一个组合动画set,一个是位移动画translate和透明动画alpha,位移动画时间500,在y轴上从最底部开始,当然默认是到中间结束的,透明动画透明度是从0.5开始的,结束透明度是1.0,其中interpolator是一个系统的动画插值器,照抄即可,这样我们运行之后就是从下面弹出效果了,当然退出的时候也是从下面弹出到中间然后消失,
下面我们让它消失的时候从中间到底部吧,很简单,吧dialog_disappear文件中的translate标签下的fromYDelta改成toYDelta,也就是让它最后到达最底部,同时把透明动画alpha的from改成1.0,to改成0.5,就是逐渐变淡消失了,这样就实现了向上弹出,向下消失的效果了,
有的时候我们需要它只出现在屏幕最上面,并且是从上往下弹出的,
不让他消失怎么办呢?
屏幕是变黑的,怎么样让周围的屏幕不变黑呢?
params.flags
= WindowManager.LayoutParams.FLAG_BLUR_BEHIND
;//这样就不会变黑了
首先看看一个alertdialog怎么写:
TextView textView = new TextView(this); textView.setText("hah"); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(),"hah",0).show(); } }); AlertDialog.Builder builder = new AlertDialog.Builder(this); AlertDialog dialog = builder.setView(textView).create(); dialog.show();如上:我们完成了一个简单的dialog,里面有一个textview,我们可以给textview设置点击事件,dialog提供了setview方法,这就表示我们可以放进去任何的布局进去,布局中可以实现任何方法,非常利于扩展,这就是今天为什么要写这个帖子
对了,这么控制这个dialog的大小呢?
Window window = dialog.getWindow(); window.setLayout(500,300);这两句代码就够啦,但是一定要dialog.show之后才可以改变他的大小,因为它还没有出现的时候你是获取不到他的宽高信息的,所以设置是没用的,只有显示出来之后才可以的
我们看到很多app中从顶部弹出一个dialog,然而退出的时候从底部退出,甚至从底部弹出,一直贴着底部,消失的时候又缩回去了,非常神奇,这个怎么实现呢?先看一段代码吧首先感谢这位仁兄:点击打开链接多有参考,先在之前的代码上加上这一句;
window.setWindowAnimations(R.style.dialog_anim);//<pre name="code" class="java">然后再Style文件中定义这么一个Style,就是我们的dialog_anim
<style name="dialog_anim" parent="@android:style/Animation"> <item name="android:windowEnterAnimation">@anim/dialog_appear</item> <item name="android:windowExitAnimation">@anim/dialog_disappear</item> </style>
看到这个地方,上面引用了两个animation文件,dialog_appear和dialog_disappear,下面我们创建这两动画文件
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromYDelta="100.0%p" />
<alpha
android:duration="500"
android:fromAlpha="0.5"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
这两个动画文件是相同的,内容都是上面的内容,解释一下,这个动画文件中有两个动画组成一个组合动画set,一个是位移动画translate和透明动画alpha,位移动画时间500,在y轴上从最底部开始,当然默认是到中间结束的,透明动画透明度是从0.5开始的,结束透明度是1.0,其中interpolator是一个系统的动画插值器,照抄即可,这样我们运行之后就是从下面弹出效果了,当然退出的时候也是从下面弹出到中间然后消失,
下面我们让它消失的时候从中间到底部吧,很简单,吧dialog_disappear文件中的translate标签下的fromYDelta改成toYDelta,也就是让它最后到达最底部,同时把透明动画alpha的from改成1.0,to改成0.5,就是逐渐变淡消失了,这样就实现了向上弹出,向下消失的效果了,
有的时候我们需要它只出现在屏幕最上面,并且是从上往下弹出的,
window.setGravity(Gravity.TOP);//这句就够啦
不让他消失怎么办呢?
// 方法一: dialog. setCanceledOnTouchOutside(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用 // 方法二: dialog.setCancelable(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键也不起作用
屏幕是变黑的,怎么样让周围的屏幕不变黑呢?
params.flags
= WindowManager.LayoutParams.FLAG_BLUR_BEHIND
;//这样就不会变黑了
相关文章推荐
- Python环境下搭建属于自己的pip源的教程
- swift之mutating
- warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)
- 机器学习 数据预处理之独热编码(One-Hot Encoding)
- maven下使用 junit对 spring进行单元测试
- Cannot create __weak reference in file using manual reference counting
- 导航UI_APPEARANCE_SELECTOR
- Axis2 WebService
- Scrapy webkit 获取js代码执行结果后再抓取
- c# 加载xml
- 【HUSTOJ】1047: 字符图形3-平行四边形
- 相同VLAN下不同子网之间的通信
- Android 拍照、选择图片并裁剪
- 关于window.event.returnValue=false的用处
- Swift开发:GCDAsyncSocket通信之TCP 客户端
- AFNetwork在请求时报错code=-1016 和 3840
- C++第五次作业
- JavaScript 设计模式之代理模式
- Android Eclipse Error inflating class android.support.v7.widget.RecyclerView
- ssh访问出错 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!