您的位置:首页 > 其它

关于安卓alertdialog你能用到的都在这里了(进出动画,显示位置,背景,设置内容,是否可以点击其他地方消失,屏幕不变暗)

2016-05-05 17:39 696 查看
alerdialog在安卓中是一个轻量级的弹出框,使用非常方便,但是有的时候我们需要让它实现更加复杂一下的功能,可能我们需要它从左边弹出,从右边弹出,从下边消失等等,今天我们来实现一下
首先看看一个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
;//这样就不会变黑了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: