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

  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
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值