专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Android

怎么创建非全屏、可拖动、非独占、最顶层的窗口

发布时间:2010-05-30 10:56:18 文章来源:www.iduyao.cn 采编人员:星星草
如何创建非全屏、可拖动、非独占、最顶层的窗口?
就像windows系统里最普通但是被设置了TOPMOST的EX_STYLE的窗口一样,具体来说就是不独占全屏,不独占焦点,可移动,可改变大小,总在最顶层的窗口。

主要用来做网络流量的流量计,或者给后台运行的需要随时观察数据变化的程序一个大点的观察窗口之类的用途。



google了很久,只找到了一些似是而非的方案,主要有下面2个说法:

1,将 Activity 的 Theme 设置为 Theme.Dialog,Theme.Panel,Theme.InputMethod 之类,这样做的实际效果是,分别将窗口的 windowFrame,windowIsFloating,windowIsTranslucent,disabledAlpha 以各种方式组合得来,都无法达到要求的效果。

2,使用 PopupWindow,但是 PopupWindow 必须有一个 View 作为 parent,这就避不开 Activity 全屏独占的问题,而且当其下的 Activity 切换的时候这个popupWindow也没了,所以也不行。


不知道有没有高手找到解决方法?

------解决方案--------------------
这个问题很有意义,就是一个可拖动的窗口。不是遮挡视线的问题,用好了还有很大的帮助。
比如,想同时看到背后屏幕和拖动窗口的信息,这就是个很好的实现方法。如果能够把窗口部分拖出屏幕就更好了。notification还是不能满足同时看见的要求。

我也来试试看怎么做到。
------解决方案--------------------
直接放到桌面上,成为一个appWidget即可,桌面小插件。
------解决方案--------------------
up一下
2.如果有全局监听输入事件(主要是触摸事件的ACTION_DOWN)的发生坐标的方法
这个应该容易实现吧?
继续调查一下,应该有办法获得当前触摸点的坐标
------解决方案--------------------
public boolean onTouchEvent (MotionEvent event) 
MotionEvent可以获取当前的坐标
For efficiency, motion events with ACTION_MOVE may batch together multiple movement samples within a single object. The most current pointer coordinates are available using getX(int) and getY(int). Earlier coordinates within the batch are accessed using getHistoricalX(int, int) and getHistoricalY(int, int).
------解决方案--------------------
弱弱的说一个,或者可以考虑ShowToast,然后自定义视图。我没记错的话,时间可以控制它显示的时间!
------解决方案--------------------
在主view的touch时间里面set toast也许可以, 比如

 vMain.setOnClickListener
(
new OnClickListener()
{
@Override
public void onClick(View v)
{
// This is the first way to customize Toast
// center and shift 50px to right, 100px down
tView.setGravity(Gravity.CENTER_VERTICAL, 50, -150);
tView.setText("This is a Custom ToastnScreen is clickednGravity: Virtical Center, X 50, Y -150nDuration: LONG");
tView.setDuration(Toast.LENGTH_LONG);

tView.show();
}
}
);

我点了下tView这个toast,他动了一下,表明点在toast上面其实主view时间监听的。你自己试试看onTouch



AOA(傲卓网)
------解决方案--------------------
"对于没有焦点的窗口是拿不到这个事件的,Touch事件只会像当前具有焦点的窗口广播。"
根本解决方案:扩展一个UI componet,更改framework层焦点处理manage和触摸事件分发机制,对此UI componte进行特殊处理。

个人建议回避这个问题,选择下述方案:
更改你的APP layout,把你需要加的这个小窗口作为整个activity的一部分进行处理,比如设计成是activity的一个item,放在底部或者顶部,不然现有机制无法解决。这样做功能能实现,只是效果差一点。

------解决方案--------------------
提供个思路
布局文件里用FrameLayout布局
全屏的最底层 和 浮动的上层 分别放在两个Layout中
上层覆盖住底层的一部分
上层和没被盖住的底层可以同时获得焦点
------解决方案--------------------
这样的技术,可以实现,具体怎么实现,我也不知道, 见过 上网管家这个软件就提供这样的功能.很好奇,

所以也一直在找这个技术的解决方法.一直找不到.楼主找到的话,帮忙提醒下啊,谢谢了.

不知道反编译 上网管家 能不能看到这样的实现方式, 工作一直在忙,还没来得及反编译...
------解决方案--------------------
http://www.eoeandroid.com/thread-58679-1-1.html
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: