精华内容
下载资源
问答
  • 在交互设计的过程中,发现关于弹窗的应用,大家不是很明确,应用起来大部分是看美观:这个操作太多了,用弹层吧;这个操作只有一个按钮,用对话框吧;这个提示不重要,用toast吧...Action sheet、Modal、Toast都是...

    2a9d5afd5a0f8938dc642ac25fec3c2f.png

    在交互设计的过程中,发现关于弹窗的应用,大家不是很明确,应用起来大部分是看美观:这个操作太多了,用弹层吧;这个操作只有一个按钮,用对话框吧;这个提示不重要,用toast吧...

    Action sheet、Modal、Toast都是什么呢?我们实际的应用场景是什么样的呢?

    首先,我们来明确一个概念,什么是模态对话框?什么是非模态对话框?

    模态对话框&非模态对话框

    区别是模态还是非模态的对话框,通过用户是否需要对对话框的内容必须进行响应。

    用户想要对对话框以内的应用程序进行操作时,必须首先对该对话框做出响应的是模态对话框。

    模态对话框尝尝伴随着半透明遮罩层,用来突出模态框内的内容


    了解了模态对话框的概念,接下来我们来了解一下Action sheet、Modal、Toast和浮出层

    动作面板(Action sheet)

    动作面板指的是底部弹出的弹窗,提供当前场景两个以上的操作动作。支持加标题和描述,这些内容的样式基本上是固定的,不支持灵活的修改。

    1c0ac49bd0142d8867b312fbd758557e.png
    图一(操作较少)

    0727f215bc5b1a999338c0770b9fa242.png
    图二(操作较多)

    在动作面板的应用时,需要注意:

    1、要有明显的退出/取消按钮

    2、对于破坏性的操作,高亮展示(删除/清空这类的操作)

    3、上图展示了两种类型的动作面板,如果操作都是纵向展示的,如图一,内容不放置过多,避免出现纵向的滚动条,最多放置6个;如果操作较多,可以采用横向放置的方法,如图二所示,可以横向进行滚动,虽然横向允许滚动,但是操作也不宜过多

    4、一般动作面板我们采用非模态的形式,就是说,一般的动作面板,都可以通过点击蒙层部分进行关闭,除了一些特殊的应用场景


    对话框(Modal)

    对话框用作显示系统的重要信息,并请求用户进行操作反馈。对话框是一种模态的形式,即用户必须要对对话框上的内容作出反馈,才能进行其他操作。因此对话框常用在用户进行了敏感操作,或者当App内部发生了较为严重的状态改变,这种操作和改变会带来影响性比较大的行为结果,用对话框的形式让用户必须作出选择。

    较多应用场景:退出、删除、评分

    a6295ed399a8cf36d403ae7aa1fdb15c.png
    图三(必须作出响应)

    在对话框的应用中,需要注意:

    1、尽可能少用,因为对话框这种模态的形式会打断用户的操作,所以只用在重要的时候

    2、标题简明,不能超过1行;描述简明,一般不超过2行。能够让用户迅速的明白打断我操作的弹窗在说什么,需要怎么操作才能继续之前的操作

    3、对话框的操作按钮最多有3个,如上图所示 竖排;大部分都是1~2按钮,如上图所示 横排。如果超过了3个,一般采用动作面板的形式(动作面板也是可以做成模态形式的哦~)

    4、在放置操作按钮的时候,把希望用户点击的、用户最可能点击的按钮放在右侧,把取消始终放在左侧

    因为对话框大多数在用户操作某内容的时候弹出的,除了一些误触的情况,大部分是希望能顺利进行到下一步的,所以把对话框的流程操作放在右侧,把取消(关闭弹窗)放在左侧;对话框的文案表达要精确,在操作的位置,不用是/否这类词,会让用户操作成本增加

    轻提示(Toast&HUD&Snackbar)

    toast是一种轻量的反馈/提示,用来提示不会打断用户操作的内容,适用于页面转场、数据交互等场景;HUD是ios系统特有的一种比toast要稍微明显一些的轻量的反馈/提示,HUD一般是除了文案还带一个icon或者动画效果,也不会打断用户的操作;Snackbar是安卓系统特有的一种轻量的反馈/提示,在安卓系统内应用的时候,Snackbar一般展示在页面的底部,除了有提示还能与用户进行简单的交互(有一个按钮进行操作)

    cf720f9f30ad3b963a4984fa52750383.png
    图四(轻提示)

    在轻提示的应用中,需要注意(下文中的轻提示都用toast代替):

    1、一次只显示一个toast

    2、有icon的toast字数4~6个,没有icon的toast字数不超过14个

    3、toast默认提示为3秒


    浮出层

    浮出层是一种暂时性的视图,一般为非模态的形式,承载轻量操作或是功能的入口

    7094e3ac65d2dc2c6c58ff9c88ea3bb3.png
    图五(浮出层)

    在浮出层的应用中,需要注意:

    选项不要太多,尤其是竖排的形式,2~5个;横排的按照屏幕宽度显示,显示不下的部分用右箭头隐藏展示。


    参考文章
    移动弹窗基础知识浅析——IOS弹窗体系
    四种常见的App弹窗设计:Toast、Dialog、Actionbar 和 Snackbar
    A Mobile Design Specification
    展开全文
  • 先看看使用系统Toast存在的问题:1.当通知权限被关闭时在华为等手机上Toast不显示;2.Toast的队列机制在不同手机上可能会...虽然大部分情况下效果都是OK的,但其实TYPE_TOAST弹窗依然存在兼容问题:4.Android8.0之后...

    先看看使用系统Toast存在的问题:

    1.当通知权限被关闭时在华为等手机上Toast不显示;

    2.Toast的队列机制在不同手机上可能会不相同;

    3.Toast的BadTokenException问题;

    当发现系统Toast存在问题时,不少同学都会采用自定义的TYPE_TOAST弹窗来实现相同效果。虽然大部分情况下效果都是OK的,但其实TYPE_TOAST弹窗依然存在兼容问题:

    4.Android8.0之后的token null is not valid问题(实测部分机型问题);

    5.Android7.1之后,不允许同时展示两个TYPE_TOAST弹窗(实测部分机型问题)。

    那么,DToast使用的解决方案是:

    1. 通知权限未被关闭时,使用SystemToast(修复了问题2和问题3的系统Toast);
    2. 通知权限被关闭时,使用DovaToast(自定义的TYPE_TOAST弹窗);
    3. 当使用DovaToast出现token null is not valid时,尝试使用ActivityToast(自定义的TYPE_APPLICATION_ATTACHED_DIALOG弹窗,只有当传入Context为Activity时,才会启用ActivityToast).

    相信不少同学旧项目中封装的ToastUtil都是直接使用的ApplicationContext作为上下文,然后在需要弹窗的时候直接就是ToastUtil.show(str),这样的使用方式对于我们来说是最方便的啦。

    当然,使用DToast你也依然可以沿用这种封装方式,但这种方式在下面这个场景中可能会无法成功展示出弹窗(该场景下原生Toast也一样无法弹出),不过请放心不会导致应用崩溃,而且这个场景出现的概率较小,有以下三个必要条件:

    1.通知栏权限被关闭(通知栏权限默认都是打开的)

    2.非MIUI手机

    3.Android8.0以上的部分手机(我最近测试中的几部8.0+设备都不存在该问题)。

    不过,如果想要保证在所有场景下都能正常展示弹窗,还是建议在DToast.make(context)时传入Activity作为上下文,这样在该场景下DToast会启用ActivityToast展示出弹窗。

    接下来再详细分析下上面提到的五个问题。

    1

    关闭通知权限时Toast不显示

    看下方Toast源码中的show()方法,通过AIDL获取到INotificationManager,并将接下来的显示流程控制权交给NotificationManagerService。NMS中会对Toast进行权限校验,当通知权限校验不通过时,Toast将不做展示。

    当然不同ROM中NMS可能会有不同,比如MIUI就对这部分内容进行了修改,所以小米手机关闭通知权限不会导致Toast不显示。

    /** * Show the view for the specified duration. */public void show() { INotificationManager service = getService(); String pkg = mContext.getOpPackageName(); TN tn = mTN; tn.mNextView = mNextView; try { service.enqueueToast(pkg, tn, mDuration); } catch (RemoteException e) { // Empty }}

    如何解决这个问题?只要能够绕过NotificationManagerService即可。

    DovaToast通过使用TYPE_TOAST实现全局弹窗功能,不使用系统Toast,也没有使用NMS服务,因此不受通知权限限制。

    2

    系统Toast的队列机制在不同手机上可能会不相同

    我找了四台设备,创建两个Gravity不同的Toast并调用show()方法,结果出现了四种展示效果:

    1. 荣耀5C-android7.0(只看到展示第一个Toast)
    2. 小米8-MIUI10(只看到展示第二个Toast,即新的Toast.show会中止当前Toast的展示)
    3. 红米6pro-MIUI9(两个Toast同时展示)
    4. 荣耀5C-android6.0(第一个TOAST展示完成后,第二个才开始展示)

    造成这个问题的原因应该是各大厂商ROM中NMS维护Toast队列的逻辑有差异。

    同样的,DToast内部也维护着自己的队列逻辑,保证在所有手机上使用DToast的效果相同。

    DToast中多个弹窗连续出现时:

    1. 相同优先级时,会终止上一个,直接展示后一个;
    2. 不同优先级时,如果后一个的优先级更高则会终止上一个,直接展示后一个。

    3

    系统Toast的BadTokenException问题

    Toast有个内部类 TN(extends ITransientNotification.Stub),调用Toast.show()时会将TN传递给NMS;

    public void show() { if (mNextView == null) { throw new RuntimeException("setView must have been called"); } INotificationManager service = getService(); String pkg = mContext.getOpPackageName(); TN tn = mTN; tn.mNextView = mNextView; try { service.enqueueToast(pkg, tn, mDuration); } catch (RemoteException e) { // Empty }}

    在NMS中会生成一个windowToken,并将windowToken给到WindowManagerService,WMS会暂时保存该token并用于之后的校验;

    NotificationManagerService.java #enqueueToast源码:

    synchronized (mToastQueue) { int callingPid = Binder.getCallingPid(); long callingId = Binder.clearCallingIdentity(); try { ToastRecord record; int index = indexOfToastLocked(pkg, callback); if (index >= 0) { record = mToastQueue.get(index); record.update(duration); } else { Binder token = new Binder();//生成一个token mWindowManagerInternal.addWindowToken(token, TYPE_TOAST, DEFAULT_DISPLAY); record = new ToastRecord(callingPid, pkg, callback, duration, token); mToastQueue.add(record); index = mToastQueue.size() - 1; keepProcessAliveIfNeededLocked(callingPid); } if (index == 0) { showNextToastLocked(); } } finally { Binder.restoreCallingIdentity(callingId); }}

    然后NMS通过调用TN.show(windowToken)回传token给TN;

    @Overridepublic void show(IBinder windowToken) { if (localLOGV) Log.v(TAG, "SHOW: " + this); mHandler.obtainMessage(SHOW, windowToken).sendToTarget();}

    TN使用该token尝试向WindowManager中添加Toast视图(mParams.token = windowToken);

    在API25的源码中,Toast的WindowManager.LayoutParams参数新增了一个token属性,用于对添加的窗口进行校验。

    61639085d62fed2f87ec66cdc0102aef.png

    当param.token为空时,WindowManagerImpl会为其设置 DefaultToken;

    @Overridepublic void addView(@NonNull View view, @NonNull ViewGroup.LayoutParams params) { applyDefaultToken(params); mGlobal.addView(view, params, mContext.getDisplay(), mParentWindow);}private void applyDefaultToken(@NonNull ViewGroup.LayoutParams params) { // Only use the default token if we don't have a parent window. if (mDefaultToken != null && mParentWindow == null) { if (!(params instanceof WindowManager.LayoutParams)) { throw new IllegalArgumentException("Params must be WindowManager.LayoutParams"); } // Only use the default token if we don't already have a token. final WindowManager.LayoutParams wparams = (WindowManager.LayoutParams) params; if (wparams.token == null) { wparams.token = mDefaultToken; } }}

    当WindowManager收到addView请求后会检查 mParams.token 是否有效,若有效则添加窗口展示,否则抛出BadTokenException异常.

    switch (res) { case WindowManagerGlobal.ADD_BAD_APP_TOKEN: case WindowManagerGlobal.ADD_BAD_SUBWINDOW_TOKEN: throw new WindowManager.BadTokenException( "Unable to add window -- token " + attrs.token + " is not valid; is your activity running?"); case WindowManagerGlobal.ADD_NOT_APP_TOKEN: throw new WindowManager.BadTokenException( "Unable to add window -- token " + attrs.token + " is not for an application"); case WindowManagerGlobal.ADD_APP_EXITING: throw new WindowManager.BadTokenException( "Unable to add window -- app for token " + attrs.token + " is exiting"); case WindowManagerGlobal.ADD_DUPLICATE_ADD: throw new WindowManager.BadTokenException( "Unable to add window -- window " + mWindow + " has already been added"); case WindowManagerGlobal.ADD_MULTIPLE_SINGLETON: throw new WindowManager.BadTokenException("Unable to add window " + mWindow + " -- another window of type " + mWindowAttributes.type + " already exists"); case WindowManagerGlobal.ADD_PERMISSION_DENIED: throw new WindowManager.BadTokenException("Unable to add window " + mWindow + " -- permission denied for window type " + mWindowAttributes.type);}

    什么情况下windowToken会失效?

    UI线程发生阻塞,导致TN.show()没有及时执行,当NotificationManager的检测超时后便会删除WMS中的该token,即造成token失效。

    如何解决?

    Google在API26中修复了这个问题,即增加了try-catch:// Since the notification manager service cancels the token right// after it notifies us to cancel the toast there is an inherent// race and we may attempt to add a window after the token has been// invalidated. Let us hedge against that.try { mWM.addView(mView, mParams); trySendAccessibilityEvent();} catch (WindowManager.BadTokenException e) { /* ignore */}

    因此对于8.0之前的我们也需要做相同的处理。DToast是通过反射完成这个动作,具体看下方实现:

    //捕获8.0之前Toast的BadTokenException,Google在Android 8.0的代码提交中修复了这个问题 private void hook(Toast toast) { try { Field sField_TN = Toast.class.getDeclaredField("mTN"); sField_TN.setAccessible(true); Field sField_TN_Handler = sField_TN.getType().getDeclaredField("mHandler"); sField_TN_Handler.setAccessible(true); Object tn = sField_TN.get(toast); Handler preHandler = (Handler) sField_TN_Handler.get(tn); sField_TN_Handler.set(tn, new SafelyHandlerWrapper(preHandler)); } catch (Exception e) { e.printStackTrace(); } } public class SafelyHandlerWrapper extends Handler { private Handler impl; public SafelyHandlerWrapper(Handler impl) { this.impl = impl; } @Override public void dispatchMessage(Message msg) { try { impl.dispatchMessage(msg); } catch (Exception e) { } } @Override public void handleMessage(Message msg) { impl.handleMessage(msg);//需要委托给原Handler执行 } }

    3

    Android8.0之后的token null is not valid问题

    Android8.0后对WindowManager做了限制和修改,特别是TYPE_TOAST类型的窗口,必须要传递一个token用于校验。

    API25:(PhoneWindowManager.java源码)

    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) { int type = attrs.type; outAppOp[0] = AppOpsManager.OP_NONE; String permission = null; switch (type) { case TYPE_TOAST: // XXX right now the app process has complete control over // this... should introduce a token to let the system // monitor/control what they are doing. outAppOp[0] = AppOpsManager.OP_TOAST_WINDOW; break; } if (permission != null) { ... } return WindowManagerGlobal.ADD_OKAY;}

    API26:(PhoneWindowManager.java源码)

    public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) { int type = attrs.type; outAppOp[0] = AppOpsManager.OP_NONE; if (!isSystemAlertWindowType(type)) { switch (type) { case TYPE_TOAST: outAppOp[0] = OP_TOAST_WINDOW; return ADD_OKAY; } return mContext.checkCallingOrSelfPermission(INTERNAL_SYSTEM_WINDOW) == PERMISSION_GRANTED ? ADD_OKAY : ADD_PERMISSION_DENIED; }}

    为了解决问题一,DovaToast不得不选择绕过NotificationManagerService的控制,但由于windowToken是NMS生成的,绕过NMS就无法获取到有效的windowToken,于是作为TYPE_TOAST的DovaToast就可能陷入第四个问题。

    因此,DToast选择在DovaToast出现该问题时引入ActivityToast,在DovaToast无法正常展示时创建一个依附于Activity的弹窗展示出来,不过ActivityToast只会展示在当前Activity,不具有跨页面功能。

    如果说有更好的方案,那肯定是去获取悬浮窗权限然后改用TYPE_PHONE等类型,但悬浮窗权限往往不容易获取,目前来看恐怕除了微信其他APP都不能保证拿得到用户的悬浮窗权限。

    5

    Android7.1之后,不允许同时展示两个TYPE_TOAST弹窗

    DToast的弹窗策略就是同一时间最多只展示一个弹窗,逻辑上就避免了此问题。因此仅捕获该异常。

    TODO LIST:

    • 增加适配应用已获取到悬浮窗权限的情况
    • 考虑是否需要支持同时展示多个弹窗

    其他建议

    • 如果能够接受Toast不跨界面的话,建议使用SnackBar
    展开全文
  • toast.show('要提示的内容',2000) //2000是时间,2s后弹窗消失 具体代码如下: toast.js部分,需要的页面引用下这个js // 常用方法1 闪屏 toast 提示,2秒后关闭 var toast = { t: null, show: function (msg, ...

    使用方法:

    toast.show('要提示的内容',2000)  //2000是时间,2s后弹窗消失
    

    效果图
    具体代码如下:

    toast.js部分,需要的页面引用下这个js

    // 常用方法1 闪屏 toast 提示,2秒后关闭
    var toast = {
        t: null,
        show: function (msg, time) {
            var $toast = $('#toast');
            var $mask = $('.mask')
            if (this.t) {
                clearTimeout(this.t);
            }
    
            if (msg) {
                var $toastContent = $('#toast .toast__content');
                $toastContent.html(msg);
            }
            $toast.fadeIn(100);
            $mask.show()
            if (time) {
                toast.t = setTimeout(function () {
                    $toast.fadeOut(100);
                    $mask.hide()
                }, time);
            } else {
                toast.t = setTimeout(function () {
                    $toast.fadeOut(100);
                    $mask.hide()
                }, 2000);
            }
    
        }
      }
    

    html部分

    <div style="display: none;" id="toast">
        <div class="mask"></div>
        <div class="toast__content">
        	内容内容
        </div>
    </div>
    

    css样式

    /*蒙层![在这里插入图片描述](https://img-blog.csdnimg.cn/201912092006502.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODE1MjQ5NA==,size_16,color_FFFFFF,t_70)*/
    .mask {
        position: fixed;
        z-index: 1000;
        top: 0;
        right: 0;
        left: 0;
        bottom: 0;
        background: rgba(0, 0, 0, 0.6);
    }
    
    .toast_content{
    	position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        z-index: 1200;
        display: flex;
        align-items: center;
        background: rgba(40, 40, 40, 0.75);
        color: #fff;
        border-radius: 80px;
        padding: 30px 50px;
        font-size: 32px;
        line-height: 20px;
        justify-content: center;
    }
    
    展开全文
  • 在 uniGUI 中实现自动弹窗后延迟几秒关闭Toast 功能。 uniGUI 的客户端使用 EXTJS 6 ,本就有Toast 功能。 但UniGui 官方没有相应的控件,我们如何使用 EXTJS 在客户端/UniGui 中实现 ? ===================...

    在 uniGUI 中实现自动弹窗后延迟几秒关闭 — Toast 功能。

    uniGUI 的客户端使用 EXTJS 6 ,本就有 Toast 功能。

    但UniGui 官方没有相应的控件,我们如何使用 EXTJS 在客户端/UniGui 中实现 ?

    =============================================================

    1、https://blog.csdn.net/q262800095/article/details/8901433 

     

    转载于:https://www.cnblogs.com/hopesun/p/9321419.html

    展开全文
  • 在本专栏 常见的弹窗及应用-Action sheet、Modal、Toast、浮出层 一文中,我们对常见的两种交互对话框——模态弹窗和非模态弹窗进行了分析与介绍。在本文中,我们将对非模态弹窗的两种形式 Toast 和 HUD 作进一步...
  • 先看看使用系统Toast存在的问题: ...当发现系统Toast存在问题时,不少同学都会采用自定义的TYPE_TOAST弹窗来实现相同效果。虽然大部分情况下效果都是 OK的,但其实TYPE_TOAST弹窗依然存在兼容问题: 4...
  • popup最小巧的移动端弹窗组件,toast、alert、confirm,使用原生js,不依赖任何类库,不需要引入任何css文件,只有一个js文件组件设计为单例模式,在一个打开状态,再次打开另一个,会自动关闭上一个1. toastlet ...
  • 应用程式的内容会显示Toast ,应用程式可以将其关闭,以恢复使用者与应用程式的互动。 Creating-创建 所有的toast选项都应该在create方法的第一个参数中传递:create(opts)。 要显示的消息应在消息属性中传递...
  • 开发过程中,有时候会有这样的需求:点击某个...如果内容为空则不关闭对话框,并toast提示。使用AlertDialog.Builder创建对话框时,可以使用builder.setNegativeButton和builder.setPositiveButton两个方法设置取...
  • 支持多种动画效果、多弹窗类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度及点击遮罩是否关闭 H5/小程序/App三端效果如下,亲测多端效果兼容性一致。(后续大图...
  • 基于uni-app开发的自定义模态弹窗|msg信息框|alert对话框|confirm确认框|toast弱提示框支持多种动画效果、多弹窗类型ios/android、可以自定义弹窗样式/自定义多按钮及事件/弹窗显示位置、自动关闭秒数、遮罩层透明度...
  • 一起从文中了解一下吧~ 如今非确认提示大多使用的提示方式为Toast,即无需交互可自动消失,这类提示不能承载太多内容。例如:“支付成功”、“输入信息有误”、“有8条信息更新”等,属于弱提示一类。这种提示方式...
  • 一、前言我们口中常说的弹窗其实是个广义的范围,包括了对话框,动作菜单,浮出层,toast,snackbar等,这么多类型的弹窗在使用中很容易混乱或者说滥用,反而得不偿失,给用户带来更多困扰。...
  • // 提示弹窗,无按钮,延迟关闭 toast: function (msg, duration) { duration = isNaN(duration) ? 2000 : duration; var m = document.createElement('div'); m.innerHTML = msg m.style.cssText = "min-
  • 后台应用无法弹窗

    2021-01-12 12:38:51
    按返回键XPopup不会关闭了"); return true; } }).asConfirm("我是标题", "床前明月光,疑是地上霜;举头望明月,低头思故乡。", "取消", "确定", new ...
  • 对dialogFragment进行封装,包装。... String dissMissType) { if(baseDialogFragment instanceof TestDialog){ Toast.makeText(this,"TestDialog"+"关闭了"+dissMissType,Toast.LENGTH_LONG).show(); } }
  • 先看看使用系统Toast存在的问题: 1.当通知权限被关闭时在华为等手机上Toast不显示; 2.Toast的队列机制在不同手机上可能会不相同...当发现系统Toast存在问题时,不少同学都会采用自定义的TYPE_TOAST弹窗来实现...
  • library.rar

    2020-04-03 16:13:02
    当发现系统Toast存在问题时,不少同学都会采用自定义的TYPE_TOAST弹窗来实现相同效果。虽然大部分情况下效果都是 OK的,但其实TYPE_TOAST弹窗依然存在兼容问题: 4.Android8.0之后的token null is not valid问题; ...
  • 在日常的开发中,我们经常会使用到 Dialog、...比如 Intent 分享,我们没有弹窗打开关闭的回调,也不能做弹窗的单例,那我们要怎么解决这个问题呢?笔者介绍两种方式。 1. 使用定时器,设置开关 private bo...
  • ChiTu Store 封装了两种类型的弹窗,confirm 和 toast,前者是确认,后者是在点击事件的函数,执行成功后弹出一个提示窗口,并关闭。 一、窗口的 HTML 代码 我们来看看 ChiTu Store 是如何封装的。  confirm ...
  • 需求在收到被踢通知时,弹窗提示用户被踢,点击继续跳转到登录界面,取消则关闭App分析由于不知道用户会在哪个界面操作时被踢,接受通知的那个Activity有可能已经失去上下文,导致空指针异常!从而无法 Toast 或 ...
  • 小程序封装提示弹窗showToast

    千次阅读 2019-07-01 17:25:44
    最好放到app.js中,作为公共函数 //title(标题), ... //duration(延时) 0为不关闭, 毫秒数 //options(其它参数), toast(title, icon = 'none', duration, options) { wx.showToast({ tit...
  • ChiTu Store 封装了两种类型的弹窗,confirm 和 toast,前者是确认,后者是在点击事件的函数,执行成功后弹出一个提示窗口,并关闭。 一、窗口的 HTML 代码 我们来看看 ChiTu Store 是如何封装的。  confirm ...
  • // Toast // 1、带成功图标提示框 this.$Toast('success', '提交成功!', () => { // 提示框关闭后 }) // 2、不带任何图标提示框 this.$Toast('none', '请输入手机号', () => { // 提示框关闭后 }) // 3、带...
  • Toast是常用的轻提示弹框,常用于页面loading和提示语弹窗。 本例基于React实现一个随时可调用且不随页面渲染的全局组件。 需求分析 Toast 不需要同页面一起被渲染,而是根据需要被随时调用。 Toast 是一个轻量...
  • 魅族 pro6 安卓 6.0 关闭弹窗权限。toast 不弹出。小米note 同样 android 6.0 app 直接闪退。android studio 模拟器 android 5, 7 两个版本没发现问题。android 4.4 没有问题。</p><p>该提问来源于开源项目:...
  • mint-ui toast提示窗

    千次阅读 2018-11-22 15:30:50
    用mint-ui做了一个简单的项目,下面简单的总结一下toast三种提示窗: 1.messagebox弹窗 this.$messagebox({ title: "温馨提示", message: "请选择续费银行", showConfirmButton: true });...
  • Taost资源汇总

    2018-12-10 08:46:44
    Taost Taost可不省心 1.当通知权限被关闭时在华为等手机上...4.Android7.1之后,不允许同时展示两个TYPE_TOAST弹窗(实测部分机型问题); 5.Android8.0之后的token null is not valid问题(实测部分机型问题)。 资...

空空如也

空空如也

1 2 3
收藏数 43
精华内容 17
关键字:

关闭toast弹窗