从view角度看dialog 和 toast

来源:互联网 发布:手机淘宝扫一扫 编辑:程序博客网 时间:2024/04/30 06:15
     首先, 来看dialog和toast 以view方式的实现: 他们都是悬浮于当前界面之上的view 这种布局方式让我们想到了framelayout, 而恰好, activity所运行的contentview 就是一个framelayout(decorview 的子view之一),这样以view的形式来分析和实现dialog和toast就成为了可能。
    然后我们分开来看, 首先是dialog:
    1. dialog出现时, 整个屏幕变成了半透明的黑色: 很简单给弹窗的view来一个ViewGroup, 这个ViewGroup要填充整个屏幕, 设置背景颜色即可;
    2. 当按下返回键时 dialog会阻断按键事件, 并且自身消失: view 有一个监听叫做KeyListener, 我们可以在其中设置返回键按下的监听
    3. dialog出现时点击非dialog范围,dialog消失: 额, 前面说的dialog容器, 给他设置一个点击事件监听, 然后dismiss即可, 当然这有可能会导致点击dialog时同样会消失, 那么我们在给dialog的view设置一个无响应的点击监听即可
    以上, 即从view角度实现了dialog, 但是不仅仅如此:
    4. 动画: 既然是view 当然可以执行动画, 那么进入和退出动画也就显而易见了
    5. 位置: 既然是view, 而且是framelayout 的子view, 那么当然可以指定出现位置了,比如最常见的居中, 当然也可以配合动画, 做出类似于IOS的从底部进入的dialog
    6. 布局: 既然是view, 那么大小, 背景, 都是可以定义的, 肯定不会有个固定宽度来限制, 想要多大就是多大, 想要圆角就有圆角
    7. 风格: 既然是view, 那么样式肯定是定义好了的, 而不会出现有的手机背景是黑色, 有的手机是白色的情况。
    8. 权限: 既然是view, 那么也就不涉及到windowmanager, 那么也就和权限分离, 那么对于一些手机的禁止弹窗, 当然也就无法产生作用了。
    接下来, 是toast:
    1. 如果以view角度来看toast, 实际上上面的dialog把半透明背景去掉, 然后小一点, 在设置一个定时器进行取消, 那么一个toast也就出来了;
    2. 焦点: toast是没有焦点的,只要把view的focusable设置成false即可, 但是实际上这是不需要的, 因为在Android中焦点的设置是很模糊, 只有EditText之类的输入类view才需要注意焦点, 而当需要弹出toast的时候,输入框却已经失去了焦点了;
    3. 权限: 这是一个重要的因素, 因为一些手机将通知栏和toast划分为一类, 都属于通知权限, 那么当禁用通知栏消息的时候(大部分人都会这样), 就会连同toast一起禁用, 所以后果可想而知;
    4. 提示: 传统的toast是从底部进入, 这就导致toast的提示一直是一个弱性提示, 但是dialog的干扰性又太强,那么我们可以将toast改成从顶部进入, 增强toast的提示强度, 当然还可以再次增强 比如将页面挤下去一部分, 如此即增强了toast的提示强度, 又不会太过于干扰用户
    5. 事件: 既然是view 当然可以设置点击事件, 例如: list 删除某个条目后, 弹出toast点击恢复
    以上是介绍用view来实现dialog和toast的逻辑和好处, 有几个类似的开源项目:


Crouton
丰富样式的Toast,允许alert、comfirm、info样式及点击消失样式,允许设置Toast显示时间,允许自定义View。 本文32. SuperToasts为其扩展版
项目地址:https://github.com/keyboardsurfer/Crouton
Demo地址:http://play.google.com/store/apps/details?id=de.keyboardsurfer.app.demo.crouton


SuperToasts
更丰富样式的toast,支持Button、Progress、Horizontal Progress样式、支持进入动画、支持撤销及其动画设置
项目地址:https://github.com/JohnPersano/SuperToasts
Demo地址:https://play.google.com/store/apps/details?id=com.supertoastsdemo  
dialogplus
一个简单的Android对话框,支持不同的弹出模式
项目地址:https://github.com/orhanobut/dialogplus  
    
    
 
0 0
原创粉丝点击