我把一个activity的theme属性设置成Theme.Translucent.NoTitleBar.Fullscreen,让界面处于透明状态,但是我的程序里还有其他activity,在我调用startActivity启动透明activity的时候其他的activity就会在下面挡住系统的桌面和其他内容无法实现透明,怎样在不销毁之前的activity的情况下让透明的activity单独出现在屏幕里,保持后面的地方透明,已经被这个问题困扰了一下午了,简直要气死,急求解答
http://blog.csdn.net/mad1989/article/details/38122713/
可以setvisible成gone隐藏到不占界面空间试试实现这样的效果
(1)透明 指的是activity使用 Theme.Translucent.*
** (2)Y:被调用;N:未被调用。
上表中,情况2很奇怪,B的onStop(),onDestroy()没有被调到,也就是说,B没有被finish掉,surface也没有被destroy,B仍然占用内存。
情况2正是目前项目所用的方案。A是不透明的,原因是:在A透明的情况下并不能实现真正的全屏,系统任务栏仍然存在,这是另外一个问题,此处不做展开讨论。
回到本文的主题,值得注意的是:对于情况2,通过android程序菜单直接运行B,然后按Back键退出B后,onStop(),onDestroy()却可以被正确调到,finish成功。
在测试了startActivity()所用的Intent的相关flags后,仍然不能解决问题。最后通过查看Launcher的源码,终于发现了问题所在:
Launcher使用了Theme.Wallpaper.NoTitleBar;
关键属性:true
在A中加入这个属性后,问题解决。android文档里对这个属性的解释是:
public static final int windowShowWallpaper
Since: API Level 5
Flag indicating that this window's background should be the user's current wallpaper.
另外,在讲Activity生存期的文档里,并没有提到这个属性,按道理来讲,不应该导致此问题。暂时还没有找到真正的控制逻辑,初步猜测可能是透明的Activity的优先级比较高导致,或者是android系统的一个不太完善的地方。
总之,还是要感谢Google将android开源,始终可以通过查看源码解决此类问题。
我觉得你是想实现activity形式的dialog,你百度一下activity形式的dialog或者你可以去下载一个我分享的Demo
连接:http://download.csdn.net/detail/demolcm/9558392 (很早之前写的了,当时上传想赚点积分,现在不需要再攒积分,可之前的源码找不到了,又不想再从新写一个,所以你要是想要实现这种的你也一选择花1积分下载一下,获取搜索一下,看有没有0积分的),如果帮助,望采纳。
额 楼主你是不是弹出的设置为透明的那个Activity里没有什么内容,所以直接透明,所以就看见了之前跳转的那个activity啊?
额 楼主你的意思是一起来就是你设置的透明的Activity?然后运行,就像看到桌面或者桌面上的程序?
每个Activity的生命周期里面这样写(或者写个Activity基类,基类里面这样写,其他Activity继承这个基类)
@Override
protected void onPause() {
super.onPause();
getWindow().getDecorView().setAlpha(0);
}
@Override
protected void onResume() {
super.onResume();
getWindow().getDecorView().setAlpha(1);
}
最后注意Application的主题设为透明
楼上的应该可以实现,就是设定其他的activity在失去焦点的方法中,设置activity透明,在重新获取焦点的方法中恢复其原来的状态