Android什么时候只会调用onPause()而不会调用onStop()?

看到网上很多人说弹出Dialog时只会调用onPause()而不会调用onStop(),可是自己做了下实验,此时既不会调用onPause()也不会调用onStop()。。。

大概扫了下官方文档,translucent(半透明) activity好像可以做到,试了下,果真可以。


至于为什么呢?让我们看下Activity生命周期(注:图片来自:Big.Nerd.Ranch.Guides.Android.Programming.The.Big.Nerd.Ranch.Guide.2nd.Edition):

可以看到要调用onPause()Activity必须Leavesforeground,查了下,好像是Activity必需离开Activity栈的栈顶,显然Dialog不是Activity,并不能使原来的Activity离开栈顶。

translucent(半透明) activity既满足使原来的Activity Leavesforeground,又保持visible,所以能有只会调用onPause()而不会调用onStop()的效果。

android设置Activity背景色为透明的2种方法

Android设置背景色为透明

方法一:

只要在配置文件内activity属性配置内加上

android:theme="@android:style/Theme.Translucent" 

就好了。

这样就调用了android的透明样式!

方法二:

先在res/values下建colors.xml文件,写入:
  
  <?xmlversion="1.0"encoding="UTF-8"?>
  
  <resources>
  
  <colorname="transparent">#9000</color>
  
  </resources>
  
  这个值设定了整个界面的透明度,为了看得见效果,现在设为透明度为56%(9/16)左右。
  
  再在res/values/下建styles.xml,设置程序的风格
  
  <?xmlversion="1.0"encoding="utf-8"?>
  
  <resources>
  
  <stylename="Transparent">
  
  <itemname="android:windowBackground">@color/transparent</item>
  
  <itemname="android:windowIsTranslucent">true</item>
  
  <itemname="android:windowAnimationStyle">@+android:style/Animation.Translucent</item>
  
  </style>
  
  </resources>
  
  最后一步,把这个styles.xml用在相应的Activity上。即在AndroidManifest.xml中的任意<activity>标签中添加
  
  android:theme="@style/transparent"
  
  如果想设置所有的activity都使用这个风格,可以把这句标签语句添加在<application>中。
  
  最后运行程序,哈哈,是不是发现整个界面都被蒙上一层半透明了。最后可以把背景色#9000换成#0000,运行程序后,就全透明了,看得见背景下的所有东西可以却都操作无效。


阅读更多
文章标签: Android 生命周期
个人分类: Android 生命周期
上一篇使用Android注解来改善代码
下一篇基础总结篇之一:Activity生命周期
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭