关于透明主题设置会影响Acticity的生命周期

问题:播放视频,然后在播放收音机,此时视频进入后台

现象:收音机界面中,弹出视频应用跳转时的提示

分析:

为了各个应用跳转时,不会闪黑屏,所有主题会继承android:Theme.Translucent.NoTitleBar。

收音机应用中调用的主题继承android:Theme.Translucent.NoTitleBar,分析发现主题中包含Translucent会影响activity的生命周期

导致在后台中运行的应用中activity没有执行onstop()方法,于是导致视频播放界面中在onstop()方法中逻辑未及时执行,视频界面

还未销毁,而视频播放信息发生变化时,在收音机界面会弹出视频应用的提示。

于是,修改了收音机的主题为android:Theme.Holo.NoActionBar,从视频进入收音机界面时,虽然会闪黑屏,但是视频后台时,执行了

onstop()方法,不会再出现在收音机界面弹其他应用的问题了。

延伸:

/*****************************************************************************************************************************************************/

后来,在网上查看相关资料,发现设置透明主题,或者定义style属性,可以达到不出现黑屏的效果,但是会影响activity的生命周期和

界面绘制时间长短。

1.设置android:windowBackground属性,在界面跳转时,会出现windowBackground定义的界面

2.设置 android:windowIsTranslucent属性

       <item name="android:windowNoTitle">true</item>  
       <item name="android:windowBackground">@android:color/transparent</item>//背景是透明的
       <item name="android:windowIsTranslucent">true</item>//这里设置了半透明 
	   <item name="android:windowBackground">@android:color/transparent</item> 
	   
设置android:windowIsTranslucent 主题是为了处理启动App看见的黑屏,确实是可以处理的,但是在界面跳转时,可能会延时1到2秒
给人程序启动慢的感觉,界面会一次性刷出来,刷新同步。
然后按home键, 然后从最近任务列表中,点击进入这个activity。
然后再点击 back界面返回时, 其实是退出这个应用了,然后会闪屏一下,闪屏一下最近任务列表
这个是由于 设置了此属性后, 进入这个activity的 上一个activity 没有执行 onstop 方法所引起的



去掉android:windowIsTranslucent之后,改为

背景是张logo图片,这种方式比较好,点击桌面图标.0~1秒就看见了Logo界面.给人程序启动快的感觉,界面先显示背景图,
然后再刷新其他界面控件,刷新不同步。
<item name="android:windowBackground">@drawable/logo</item>

/*****************************************************************************************************************************************************/



/*****************************************************************************************************************************************************/

在一个activity中, 在代码中动态修改actionbar和 状态栏的颜色
说真的为什么要用 actionbar。感觉难用死了,而且是改bug 基本要求在原代码基础上不变进行修改,如果添加自定义actionbar 自定义view 啥的又感觉好麻烦

一 、现状
 
    1.默认是设置了activity 启动的style
	里面包括 状态栏的显示效果,actionbar或自定义多toolbar等的显示效果,)

	2. 根据需求在变幻动画后,界面需要变化 需要修改等属性,因为为了适配下一个界面的效果(需求)

二、解决:

	2.0 这里再重申下之前不同版本的要求状态栏和app风格一致的设置方式

	4.4 -5.0 设置的透明状态栏(布局xml中也要设置)
	
	values-v19/style.xml

    <style name="XXXX" parent="Theme.XXXX">
		<item name="android:windowTranslucentStatus">true</item>
		<item name="android:windowTranslucentNavigation">true</item>
    </style>


	5.0以上 (当statusBarColor 和 colorPrimary 2个属性同时存在的话,状态栏的颜色是根据statusBarColor属性走的)
	
	values-v21/style.xml

	当你的主题继承的是 普通的 就设置 当statusBarColor 就好了
	<style name="XXX" parent="XXXX">
		<item name="android:windowTranslucentStatus">false</item>   
		<!-- 其实为了适配的话这里就设置false 下面设置颜色比较好-->
		<item name="android:windowTranslucentNavigation">true</item>
		<!--Android 5.x  把颜色设置透明 , 或者直接设置状态栏的颜色与app风格一致也可以-->
		<item name="android:statusBarColor">@android:color/transparent</item>
	</style>
	
	
	如果继承的是 Material 风格的主题
	@android:style/Theme.Material (dark version)
	@android:style/Theme.Material.Light (light version)
	@android:style/Theme.Material.Light.DarkActionBar

	与之对应的AppCompatTheme:
	Theme.AppCompat
	Theme.AppCompat.Light
	Theme.AppCompat.Light.DarkActionBar

       <item name="colorPrimary">@android:color/holo_blue_bright</item>
       <item name="colorPrimaryDark">@android:color/holo_blue_bright</item>


	2.1 修改状态栏 6.0 (这次需求的重点)

		(1)代码中设置状态栏颜色

				Window window = this.getWindow();
				window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
				window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);     
				window.setStatusBarColor(this.getResources().getColor(R.color.TCT_colorPrimary));
				
	

/*****************************************************************************************************************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值