iPhone 5发布了,虽然有些让人失望,但是 iPhone 的地位还是无可厚非的。随着移动设备的大军进入,各位站长是否有考虑过开发自己网站的 APP 呢?...当然不是谁都有这技术的...这样,Safari 的一个叫“添加至主屏幕”的功能就引起了我的注意,我们可以通过它伪装出一个 APP 来。...但是大家是否有发现,“添加至主屏幕”后,那个图标是你网站的缩略图,不怎么好看。那么如何自定义网站“添加至主屏幕”的图标呢?...至于“图标阴影”,是 iOS 设备中统一为所有桌面元素增加的,所以不作为图标单独处理的样式。...由于在视觉上统一最重要的是形状的统一,所以“圆角”是必须的,但是对于“高光”苹果没有做出特别的强调,所以苹果设置当中把“高光”作为可选项,就产生了 apple-touch-icon 和 apple-touch-icon-precomposed
,发现屏幕黑屏;或者打开了其他接受输入焦点的对话框或弹出窗口,点击返回键时发生屏幕黑屏,需要触摸屏幕(获得焦点)才能正常显示。...--onWindowFocusChanged:false(此时app页面出现黑屏) (2)解决方法 在游戏主活动UnityPlayerActivity中,重写onStart()方法,添加获取焦点的方法,...--onRestart--onStart--onWindowFocusChanged:ture--onNewIntent--onResume(此时app页面正常显示) 由上可见,二者生命周期的异同在于,...是否在调用onStart后调用一次onWindowFocusChanged:true,来获取当前窗口的焦点,实现正常交互。...(还不能响应输入事件) onPause ():活动仍在屏幕上可见,但用户不再与其交互时进行调用,eg:弹框等页面覆盖了当前活动时。
版权声明:本文为博主原创文章,未经博主允许不得转载。...那那个坐标是相对于屏幕而言的呢,以及要怎样获取相对于屏幕的坐标呢? 目前View里面的变量还没有一个是相对于屏幕而言的,但是我们可以获取到相对于屏幕的坐标。...(返回的是View视觉上的图标,即我们眼睛看到位置的Y坐标,默认值跟getTop()相同,别急,下面会解释) getTranslationY() Added in API level 14...,直到ViewRootImpl处理该事件,ViewRootImpl会调用三大流程,从measure开始,对于每一个含有标记位的view及其子View都会进行测量、布局、绘制,性能较差,源码体现如下:关于...getX()是表示Widget相对于自身左上角的x坐标,而getRawX()是表示相对于屏幕左上角的x坐标值 (注意:这个屏幕左上角是手机屏幕左上角,不管activity是否有titleBar或是否全屏幕
(location);//获取在整个屏幕内的绝对坐标 location [0]--->x坐标,location [1]--->y坐标 getLocationOnScreen 计算该视图在全局坐标系中的x...,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标 getLocationInWindow 计算该视图在它所在的widnow的坐标x,y值,获取在整个窗口内的绝对坐标...getLeft , getTop, getBottom,getRight 这一组是获取相对在它父亲里的坐标 如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些...在onWindowFocusChanged(boolean hasFocus)中获取为好 即覆写Activity的onWindowFocusChanged(boolean hasFocus)方法 XXX_Activity...: @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged
我们继承ScrollView重写Touch方法,随触摸事件反馈scrollDistanceY。需要特殊处理手指离开后屏幕还在滑动导致 scrollDistanceY改变的情况。 ...在Activity我们获取内部固定布局距离顶部的高度,与我们实时获取的scrollDistanceY做比较,控制外部固定布局是否显示,达到效果图的效果。...* 这是一个能够实时向主View提供滑动距离Y值的ScrollView(滑动的高度) * 能够运用此ScrollView实现在内部View固定顶部布局的需求 */ public class FixedHeadScrollView...=scrollDistanceY){//如果不相等,说明手指离开后,屏幕仍然在滑动,继续更新scrollDistanceY的值 scrollDistanceY...建议在onWindowFocusChanged()中去获取。 xml中,外部固定布局一定要放在scrollView外面。 记得处理手指离开屏幕后,界面仍然在滑动,导致外层固定布局的显示隐藏控制有误。
窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 Activity 1. Activity 的使用 我们新建的工程中带有一个基础 activity。 新建工程中,需要注意3个文件。...android.intent.category.LAUNCHER 表示可以在手机“桌面”上看到应用图标。 设置了这 2 个标签,决定了这个 activity 是用户点击应用图标时第一个启动的界面。...说下Activity的生命周期? onCreate()方法:活动第一次创建的时候被调用,常做初始化的操作,比如加载布局(setContentView),绑定事件(findViewById)。...但需要注意的是,在 onCreate 取出数据时一定要先判断savedInstanceState 是否为空。...如果不存在,会判断是否指定的栈不存在,就创建一个栈并将Activity的实例压入,如果指定的栈存在,就直接压入该栈中。
和尚调试了很久,通过【弱引用 + onWindowFocusChanged】的方式来解决目前的问题,也许不是最好的处理方式,但和尚觉得是相对简单的方式,因此记录一下。...问题原因 和尚的 MainActivity 中需要处理很多业务逻辑以及配置项处理等,在 UI 页面展示前会相对较慢,因此导致前一个 SplashActivity 页面已经销毁但是后一个主 MainActivity...onWindowFocusChanged() 周期函数 判断窗口变化,在当前 Activity 的窗口获取焦点或失去焦点时进行回调。...扩展测试 为什么要在 onWindowFocusChanged() 方法中添加是否是首次进入本页面的状态判断?...这个主要是由 Activity 的生命周期决定的,该方法主要是监测窗口是否获取或失去焦点,测试如下: 1.
fm.gif 首先看看主界面的xml布局: 屏幕高度的二分之一 info.setLayoutParams(InfoLayoutParams); //显示菜单的View是屏幕的高度 menu.setLayoutParams...接着当Activity显示为可见的时候会回调onWindowFocusChanged()方法。而onWindowFocusChanged()方法里主要的操作是初始化各个子View的大小。...因为在onCreate()时此时整个Activity的界面还没有显示,所以等不到屏幕的整个View的大小的参数,所以在onWindowFocusChanged()里,首先把ObservableScrollView...然后动态设置各个子View的大小,核心代码如下: //显示信息的View是屏幕高度的二分之一 info.setLayoutParams(InfoLayoutParams); //显示菜单的View是屏幕的高度
先给出软件介绍,所有软件下载地址稍后放出,博主苦逼考试学习,挤出时间继续更新。...适用于Mac OS平台版本, 用于编辑HTML文件, 文本文件及程序源代码,相当于Windows下的Editplus、notepad++,万能的编辑文本软件。...Gestimer Gestimer 是一款简单方便的提醒创建小工具,虽然 Mac OS X 预装了提醒事项应用,但想要创建提醒事件时必须首先输入事件的名称,然后选择在某个特定的时间或地点提醒自己,比较麻烦...Gestimer 提供的事件创建功能更直观,可以快速流畅的创建提醒事项,当然,软件也有一定的局限性,比如创建的提醒事项不能相隔太久。...HazeOver HazeOver 是 Mac OS X 上的一款小工具,它可以在激活的窗口区域以外显示阴影,这可以让你很方便聚焦在当前的任务上,再也不用担心所有窗口叠在一起了,等于高亮当前窗口,尽量不分散你的注意力
——个人平时笔记,看到的同学欢迎指正错误,文中多处摘录于各大博主与书籍精华 1、Window、WindowManager: >1.Android中所有的视图都是通过Window来呈现的,不管是Activity...、Dialog还是Toast,它们的视图都对应着附加在一个Window上的,因此Window实际是View的直接管理者。...Activity/Fragment/Dialog的onWindowFocusChanged()方法中使用该方法才是准确的,因为该方法的调用时机是Window加载完成,所有View也都添加进来了。...Android获取窗口可视区域大小 Android中获得屏幕宽高的实用方法 android整个DecorView上移到软键盘的上面 Rect outRect= new Rect(); view.getWindowVisibleDisplayFrame...getDecorView().getWindowVisibleDisplayFrame(outRect); 虽然方法名字中有一个Visible,但是getWindowVisibleDisplayFrame()的结果并不受该窗口是否在被其他窗口遮挡的影响
但是,人类的智慧是无限的,程序员需要逆流而上。...)的点击事件是在framework层进行处理的,因此onKeyDown与dispatchKeyEvent都捕获不到点击事件。...划瓶解锁的基本思路很简单,当手指在屏幕上滑动时,拦截并处理滑动事件,使锁屏页面随着手指运动,当运动到达一定的阀值时,用户手指松开手指,锁屏页自动滑动到屏幕边界消失,如果没有达到运动阀值,就会自动滑动到起始位置...mMoveView是锁屏页的显示内容,除了处理一些简单的点击事件,其他非点击事件序列都由底层的UnderView进行处理。...”(仅适用于使用导航栏的设备,即虚拟按键)。
当这个标签与 SYSTEM_UI_FLAG_HIDE_NAVIGATION和 SYSTEM_UI_FLAG_FULLSCREEN一起使用的时候,导航栏和状态栏就会隐藏,让你的应用可以接受屏幕上任何地方的触摸事件...当沉浸式全屏模式启用的时候,你的Activity会继续接受各类的触摸事件。用户可以通过在边缘区域向内滑动来让系统栏重新显示。...如果你在打造一款真正的沉浸式应用,而且你希望屏幕边缘的区域也可以与用户进行交互,并且用户也不会经常访问系统UI。...单纯的点击监听可能不是最好的解决方案,因为当用户在屏幕上拖动手指的时候(假设点击的内容占据了整个屏幕),这个事件也会被触发。...@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus
应用场景 获得点击事件处 相对点击控件 & 屏幕的坐标 2....(即x轴方向) int y = location[1]; // view距离window 顶边的距离(即y轴方向) // 注:要在onWindowFocusChanged()里获取,即等window窗口发生变化后...应用场景 获得 View 相对 屏幕 的绝对坐标 2....(即x轴方向) int y = location[1]; // view距离 屏幕顶边的距离(即y轴方向) // 注:要在view.post(Runable)里获取,即等布局变化后 3....应用场景 View可见部分 相对于 屏幕的坐标。 2.
]状态栏的一些认识 [Android]锁定屏幕 这三篇是按顺序写的,本来只是项目上的应用,其实并不需要深究的,查到方法并能用起来就好。...这么做的意义就是可以让用户目光的焦点集中在程序要显示的内容上面,避免了屏幕上过多的东西分散用户注意力。 可能这么说起来感觉这么做没有太大的意义,但实际上用户体验就是各方面一点点的细节积累起来的。...bar) 这个模式的效果为隐藏掉上下两条 bar,同时你在 bar 的范围内点击事件也不会将其唤出,这为程序的操作提供了很大的便利。...你会问,既然点击事件不会唤出 bar,那我要是想用 bar 上的功能怎么办?...@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus
ArrayList dotsList; ArrayList lineTagsList; ArrayList selectedList; int tag; //保存上⼀次被点亮的点的对象 ImageView...firstPassword; //提示的⽂本视图 TextView alertTextView; @Override public void onWindowFocusChanged(boolean hasFocus...) { super.onWindowFocusChanged(hasFocus); //判断是否已经显示 if (hasFocus){ //获取容器 RelativeLayout rl = findViewById...{ //获取这个dot相对于屏幕的x y int[] loc = new int[2]; dot.getLocationOnScreen(loc); int dx = loc[0]; int dy...手指在两个点间滑动时,两个点的tag值组成一个两位数(两个点小的tag值组成十位,大的组成个位),遍历所有的线的tag值,判断是否有与这个两位数相同的tag值,有则点亮该线。
决定终止哪个进程时,Android 系统将权衡它们对用户的相对重要程度。例如,相对于托管可见 Activity 的进程而言,它更有可能关闭托管屏幕上不再可见的 Activity 进程。...因此,是否终止某个进程的决定取决于该进程中所运行组件的状态。 下面,我们介绍决定终止进程所用的规则。...2.可见进程 没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。...此线程非常重要,因为它负责将事件分派给相应的用户界面小工具,其中包括绘图事件。...例如,当用户触摸屏幕上的按钮时,应用的 UI 线程会将触摸事件分派给小工具,而小工具反过来又设置其按下状态,并将无效请求发布到事件队列中。UI 线程从队列中取消该请求并通知小工具应该重绘自身。
(2)、而在手机屏幕上的坐标系与数学坐标系还是有差别的,移动设备一般定义屏幕左上角为坐标原点,x轴向右为正方向,y轴向下为正方向,如图: ?...二、Android屏幕区域的划分 Android屏幕区域主要划分为五个区域分别为:状态栏区域、ActionBar区域、View布局区域、应用程序App区域、屏幕区域,相互之间又存在嵌套关系。...此时界面已渲染结束 @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged...三、Android坐标系的分类 上面我们分析了Android屏幕区域的划分,接着我们分析一下与区域相关的Android坐标系,在Android坐标系中可以分为:屏幕坐标系,视图坐标系。...(1)、屏幕坐标系 屏幕坐标系我们前面在和数学坐标系的区别已经介绍过了,以屏幕左上角为坐标原点,x轴向右为正方向,y轴向下为正方向,如图所示: ?
应用启动速度 一个应用App的启动速度能够影响用户的首次体验,启动速度较慢(感官上)的应用可能导致用户再次开启App的意图下降,或者卸载放弃该应用程序 本文将从两个方向优化应用的启动速度 : 1.视觉体验优化...2.启动主线程(main thread) 3.填充加载布局Views 4.在屏幕上执行View的绘制过程.measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口...//Activity @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged...,优化用户体验 广告页优化 闪屏页过后就要展示金主爸爸们的广告页了 因为项目中广告页图片有可能是大图,APng动态图片,所以需要将这些图片下载到本地文件,下载完成后再显示,这个过程往往会遇到以下两个问题...或者是其它异步下载操作 在广告页图片 文件流完全写入后 记录图片大小,或者记录一个标识 在下次的广告页加载中可以判断是否已经下载好了广告页图片以及图片是否完整,否则删除并且再次下载图片 另外因为在闪屏页中仍然有
注意,到现在,我们得到的只是一个 空壳子 View 树,它并没有被添加到屏幕上,其实也不能添加到屏幕上。所以,在 onCreate() 回调中获取视图宽高显然是不可取的。...重点,发起绘制并显示到屏幕上 root.setView(view, wparams, panelParentView); 这里两行代码都是重中之重。...attachInfo 是否为空。...注意,到现在,我们得到的只是一个 空壳子 View 树,它并没有被添加到屏幕上,其实也不能添加到屏幕上。所以,在 onCreate() 回调中获取视图宽高显然是不可取的。...重点,发起绘制并显示到屏幕上 root.setView(view, wparams, panelParentView); 这里两行代码都是重中之重。
领取专属 10元无门槛券
手把手带您无忧上云