d窗,或者严格意义上来说,模态d窗,在前面按照功能定义分为Alert、Confirm、Prompt三种,这是在PC端和移动端都适用的一种功能性分类方法,在移动端,可以依据它们的表现形式不同而分为如下几种,当然其中有些依据不同的分类方法可以归入蒙版、浮层等不同的分类,但也可以作为d窗的表现形式:
引导d窗(Coach Marks)是d窗的一种特殊应用形式,其主要目标是引导新用户快速了解和掌握应用的新功能和 *** 作方式,所以部分蒙板遮罩位置会镂空把要描述的元素露出,同时配合文字描述和 *** 作按钮,以达到帮助用户快速上手的目标。
引导d窗是唯一的把当前场景(Context)结合到d窗里合并显示但仍保持模态交互方式的d窗形式。
全屏d窗是指浮层从下方滑入并覆盖整个屏幕的浮层样式,一般这种d窗比较容易同切换页面相混淆,用户处于当前界面的分支流程而非下一步流程时较多使用,用户会有一种还停留在当前页面的心理认知,一般使用关闭或取消按钮解散d窗而非返回以暗示用户此时仍处于当前场景中。
此类d窗一般由屏幕上端或下端切入并覆盖部分屏幕,主要用来作为选择、输入项的辅助展示界面,因被覆盖的界面部分只有局部且此浮层主要由用户主动触发,所以用户并无明显的被打断和跳出的感觉。用户点击蒙板区域或选择 *** 作项后解散d窗。
*** 作按钮列表是iOS系统的原生控件,也是此浮层的一种特殊表现形式。
居中d窗是平台使用较多的一种表现形式,d窗中心点位于屏幕正中,既是视觉焦点,也便于用户 *** 作。各种消息框、信息简介都属于这种形式。用户点击关闭按钮或蒙板区域解散d窗。
运营d窗是以营销活动展示为目的,浮层以竖向中心点为基点居中对齐,内容区域主背景可以设计为异形,即以PNG格式保存,透明的部分镂空。以增加设计自由度。有 *** 作按钮和关闭按钮便于用户查看活动详情或解散按钮。
因为用户习惯于在看到运营d窗时视线向右上方寻找关闭按钮,所以有些App为了增加点击率而把关闭按钮放在其他位置。
以上就是d窗的几种不同表现形式,一般来说每种表现形式都有自己擅长表现的使用场景如全屏d窗适合于表单较多的分支任务或、文件选择,侧边d窗适合于筛选和排序定义等,重要的是,用合适的载体来应用于合适的场景中,才能发挥最佳效果。
1、含义
Popwindow就是Android上自定义的一个d出窗口,是在当前activity的顶部的,可以在任意的位置显示,在显示的时候会阻塞UI线程。
2、构造
Popwindow可以直接通过构造方法获取
new PopupWindow(View contentView,intwidth,intheight,booleanfocusable)
构造方法有很多,但是要确保contentview ,width,hight的设置,否则Popwindow不会显示任何内容
这些参数也都可以单独进行设置,比如 popwindowsetContentView(contentView);
3、解析
popwindow的难点就在于这几个参数的设置,一般容易使人迷惑。
popupWindow1setFocusable(true);//获取焦点
popupWindow1setOutsideTouchable(true);//获取外部触摸事件
popupWindow1setTouchable(true);//能够响应触摸事件
popupWindow1setBackgroundDrawable(newColorDrawable(0x8f000000));//设置背景
关于背景的设置
popupWindow1setFocusable(true);//获取焦点
popupWindow1setOutsideTouchable(true);//获取外部触摸事件
popupWindow1setTouchable(true);//能够响应触摸事件
//popupWindow1setBackgroundDrawable(new ColorDrawable(0x8f000000));//设置背景
一般情况,如果前面几个设置都设置为true,而且果设置了背景的话,那么你按back键和点击d窗外的区域能使d窗消失,如果不设置背景的话,则不会有这样的效果,即使你设置了popupWindowsetOutsideTouchable(true)。
那么这是为什么呢?别人这里已经有完整的解答,就不再赘述了。
详情见: >
我也只能给你说个大概,先说原理:
前端先定义一个最后一条数据ID的变量,然后使用一个延时系统每隔一段时间用Ajax从服务器获取数据库最后一条记录的ID,只要当获取到的ID大于当前ID的那个变量时,就d窗。
大概代码如下:
var id = 最新的ID;//此ID动态生成,使用你用的代码先获取数据库最后一条记录的ID
function check_id()
{
$get("/getnewidurl",function(newid)//使用Ajax,我这里为了简便,使用的JQ里的GET方法,其获取最后ID的地址为getnewidurl,返回值为获取到的最新ID。
{
if(newid > id)//当获取的最新ID大于现ID时
{
alert("有新记录产生!");//d窗
id = newid;//并让现有ID值更新为最新的ID
}
}
setTimeout("check_id", 1000)//每1000毫秒执行一次check_id()函数,这个可以自行设置其频率
}
方法一:启用d出窗口阻止程序
1、打开控制面板,将查看方式设置为大图标,点击“Internet选项”;
2、在d出的Internet属性窗口中,切换至隐私项,勾选d出窗口阻止程序下面的“启用d出窗口阻止程序”,点击右边的“设置”按钮;
3、在打开的d出窗口阻止程序设置窗口中可以看到:
d出窗口当前已被阻止(我们可以设置将特定网站添加到下表中,允许来自该站点的d出窗口)。
4、返回到Internet属性隐私项窗口,点击应用并确定。
方法二:禁止网页自启动项阻止网页d出广告窗口
在任务管理器中禁止网页自启动项,如果有自启动的网页项,点击禁止。
具体 *** 作:
按Win+R键打开运行窗口,输入MSConfig,回车打开系统配置窗口,切换至启动项,禁止自启动的网页项。
方法三:修改注册表值阻止网页d窗广告
1、按Win+R打开运行窗口,输入regedit,回车进入注册表编辑器;
2、依次展开至HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon,在右侧找到并选择删除“LegalNoticeCaption”和“LegalNoticeText”两个键值。
由于产品设计的问题,现在存在进入播放页面有多个d窗可能同时d出的问题,于是存在重叠遮挡,而且由于提示是异步回调的,多层d窗重叠的样式也不一致。
于是,产品经理定了下优先级,确定了这种情况下的d出顺序。
以下为该问题的处理总结:
1,d窗的类型:
(1)在初始化数据接口中,可以确定的多个d窗
(2)通过单独接口通知的d窗
2,d窗的关闭方式:
(1)手动关闭
(2)倒计时关闭
3,问题概括:
(1)无法同时获得全部的d窗,因此无法在最初时刻为其排序,因此d窗的排序必须是动态的
(2)低级别d窗d出后,后加入的高级别d窗也不能d出
4,解决方案:
(1)为d窗增加模型表示,配置相应的优先级
(2)将模型存入数组,每加入一组数据,对数组进行排序,如果当前d窗的优先级最高,展示该d窗(第一个加入的d窗一定会展示)
(3)可以同时获取的d窗,按照优先级顺序加入数组
(4)为已经展示的d窗增加最高权重
(5)d窗移除时,同时移除数组中的数据,并展示下一个
以上就是关于d窗发展简史(五):移动端d窗的几种表现形式全部的内容,包括:d窗发展简史(五):移动端d窗的几种表现形式、PopWindow完全解析、数据库未录入数据d出d窗代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)