android activity 隐藏,启动时隐藏 Activity

想要 Activity 在启动时就不显示(不会出现闪一下或黑屏的情形),只要在 AndroidManifest.xml 中设置 Activity 的 theme 即可:

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

……

activity/>

但在某些情况下,我们需要按照流程的判断来动态设定 Activity 的 theme。

Activity 类提供了 public void setTheme(int resid) 方法,但实测下来,把 setTheme 放在 onCreate 方法的 super.onCreate 之前屏幕会变黑;放在 super.onCreate 之后则屏幕还是会闪一下;

查了一些资料后,最终的做法是重载 Activity 的 setTheme 方法,如下所示:

@Override

public void setTheme(int resid)

{

if (xxx) //满足条件,设置指定的theme

{

super.setTheme(R.style.mytheme);

return;

}

super.setTheme(resid);

}

上述做法要结合

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

……

activity/>

一起使用才行!

引申出一个小试验:

如果我把 AndroidManifest 中的 theme 设置成自己定义的样式,在重载的 setTheme 方法中设置 R.style.Theme.NoDisplay 的话还会是相同效果吗?

android:theme="@style/mytheme"

……

activity/>

@Override

public void setTheme(int resid)

{

if (yyy) //满足条件,设置Theme.NoDisplay

{

super.setTheme(android.R.style.Theme_NoDisplay);

return;

}

super.setTheme(resid);

}

结果发现,这样的情况下启动 Activity,屏幕还是会闪一下。

很奇怪,查了一下 setTheme 的源码:

@Override

public void setTheme(int resid)

{

if (mThemeResource != resid)

{

mThemeResource = resid;

initializeTheme();

}

}

做一下简单的猜测:在 AndroidManifest 中设置的 theme 在 Activity 启动时会进行预加载,然后在 setTheme 方法中判断传入的 theme 的 id 是否与已加载的 theme 的 id 相同,如果不同,则重新进行加载,而重新加载是需要时间的,所以就出现了屏幕闪一下的情况。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值