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

来源:互联网 发布:淘宝售后多长时间关闭 编辑:程序博客网 时间:2024/05/16 09:35
  1. alerdialog在安卓中是一个轻量级的弹出框,使用非常方便,但是有的时候我们需要让它实现更加复杂一下的功能,可能我们需要它从左边弹出,从右边弹出,从下边消失等等,今天我们来实现一下
  2. 首先看看一个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方法,这就表示我们可以放进去任何的布局进去,布局中可以实现任何方法,非常利于扩展,这就是今天为什么要写这个帖子
  3. 对了,这么控制这个dialog的大小呢?
    Window window = dialog.getWindow();window.setLayout(500,300);
    这两句代码就够啦,但是一定要dialog.show之后才可以改变他的大小,因为它还没有出现的时候你是获取不到他的宽高信息的,所以设置是没用的,只有显示出来之后才可以的
  4. 我们看到很多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>
  5. 看到这个地方,上面引用了两个animation文件,dialog_appear和dialog_disappear,下面我们创建这两动画文件
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <set xmlns:android="http://schemas.android.com/apk/res/android">
    3.     <translate
    4.         android:duration="500"
    5.         android:fromYDelta="100.0%p" />
    6.     <alpha
    7.         android:duration="500"
    8.         android:fromAlpha="0.5"
    9.         android:interpolator="@android:anim/accelerate_interpolator"
    10.         android:toAlpha="1.0" />
    11. </set>
  6. 这两个动画文件是相同的,内容都是上面的内容,解释一下,这个动画文件中有两个动画组成一个组合动画set,一个是位移动画translate和透明动画alpha,位移动画时间500,在y轴上从最底部开始,当然默认是到中间结束的,透明动画透明度是从0.5开始的,结束透明度是1.0,其中interpolator是一个系统的动画插值器,照抄即可,这样我们运行之后就是从下面弹出效果了,当然退出的时候也是从下面弹出到中间然后消失,
  7. 下面我们让它消失的时候从中间到底部吧,很简单,吧dialog_disappear文件中的translate标签下的fromYDelta改成toYDelta,也就是让它最后到达最底部,同时把透明动画alpha的from改成1.0,to改成0.5,就是逐渐变淡消失了,这样就实现了向上弹出,向下消失的效果了,
  8. 有的时候我们需要它只出现在屏幕最上面,并且是从上往下弹出的,
    window.setGravity(Gravity.TOP);//这句就够啦
    不让他消失怎么办呢?
    // 方法一:dialog. setCanceledOnTouchOutside(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用// 方法二: dialog.setCancelable(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键也不起作用
  9. 屏幕是变黑的,怎么样让周围的屏幕不变黑呢?
    1. params.flags= WindowManager.LayoutParams.FLAG_BLUR_BEHIND;//这样就不会变黑了

0 0
原创粉丝点击