xsmile
You can fly higher
xsmile's Blog
Android悬浮窗体

今天刚更新了来电通1.3.0.1Android版本,发现新增添了一个悬浮窗显示流量功能,很是牛X。于是好奇想知道怎么实现的,网上一搜索,原来是重写了Toast窗体的样式,然后在程序中一直调用显示该Toast就可以了。可是,如何实现Toast任意移动呢?之前的图片移动思路都是建立在本程序窗口内,这个Toast可是任意窗口之上的啊…

真牛X,有空试一下代码,看怎么弄的….

————更新—————-

被误导了!Toast根本就不接受焦点,浪费我半天时间,给Toast自定义了一个view,即使定义view为焦点可控,也没有任何作用! 看了SDK的Activity文档,发现以下内容:

“An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI with setContentView(View). While activities are often presented to the user as full-screen windows, they can also be used in other ways: as floating windows (via a theme with windowIsFloating set) or embedded inside of another activity (using ActivityGroup).”

可是如果通过activity来实现貌似是不可能的,因为悬浮窗体作为程序的一个属性,可以随时关闭。

好吧,我已经没有思路了,脑细胞也已经死差不多了,睡觉去了!

———————-2011.1.23–1:30更新—————-

我现在只想说“发克”,一天半的时间全花在这上面了,反编译了三个带悬浮窗功能的软件,看代码看到现在!没有思路的原因就是陷入了惯性思维,被限制在Activity里面了。这个很牛X的悬浮窗原来就是直接使用WindowManager添加了一个View。

这个WindowManager是最底层的,且是全局唯一的,通过使用WindowManager mWin = (WindowManager)getSystemService(Context.WINDOW_SERVICE)来获得,实际上Activity啊Dialog啊Toast啊等等都是基于WindowManager来实现的。用它生成的东西在直接“画在”屏幕上,不用管什么activity或是当前什么应用程序。

哎,累~WindowManager的属性和使用方法需要进一步查询资料了,悬浮窗口的思路就是这样,剩下来的就是封装、重写代码设计而已了。

———————-2011.1.24–11:18更新—————-
应经成功搞定,参见这里

发表回复

textsms
account_circle
email

  • shutup

    你好,我想实现这样一个效果:直接打开应用就是一个小窗口,或者直接就是一个悬浮小窗口,该如何做呢?

    12 年前 回复

xsmile's Blog

Android悬浮窗体
今天刚更新了来电通1.3.0.1Android版本,发现新增添了一个悬浮窗显示流量功能,很是牛X。于是好奇想知道怎么实现的,网上一搜索,原来是重写了Toast窗体的样式,然后在程序中一直调用显示…
扫描二维码继续阅读
2011-01-21