ActionBar隐藏与出现

来源:互联网 发布:无尽之剑3宝石数据修改 编辑:程序博客网 时间:2024/05/01 15:26

项目做了一次小的启动优化, 由于某种原因,launchActivity被我拿掉直接并到了MainActivity里(专门为launch的splash准备一个Activity其实挺浪费的).
结果出现了著名的启动白屏问题, 这个问题之前就碰到过,root cause其实是android的渲染层机制,直接原因就是因为Activity使用了ActionBar(当然了,不知道sherlockactionbar会不会有同样问题),贴一篇将app启动的文章吧, http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/, 讲的不算深,但是还不错.
知道了这个原因,问题就好办了,把ActionBar拿掉显然不行,因为在项目中已经根深蒂固了,老实说,我对ActionBar的印象不好,虽然Android设计文档中推荐,简单的App用当然很好用,封装的好,分离性也好,但是涉及到复杂的交互时,因为ActionBar的特殊地位与相对独立的控制,Action
Bar反而会成为累赘与例外制造者,并且,完全可以用fragment之类的机制来实现同样的效果,不说了,反正现在也那不掉.
既然拿不掉,那么hide不就OK了么? 结果发现没有用,一直显示…, 并且我在hide的注释里还找到一个建议:
Instead of calling this function directly, you can also cause an
ActionBar using the overlay feature to hide through
{@link View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN}.
Hiding the ActionBar through this system UI flag allows you to more
seamlessly hide it in conjunction with other screen decorations.

显然是建议我尝试SYSTEM_UI_FLAG_FULLSCREEN,还是没有用……….
后来采用了一种曲线救国的办法: Activity的Theme不能直接设置,要在onCreate 中setTheme(有ActionBar的样式),然后getActionBar.hide(都要在setContentView之前,常识), setContentView(splash layoput),然后,在splash之后setContentView(content layout), getActionBar.show().终于做到隐藏然后出现了.
抽时间把ActionBar的源码实现看看吧. ActionBar貌似一直是个trouble-maker.

0 0
原创粉丝点击