在开发的过程中,为了增加更好的视图效果,需要将当前Activity设置为全屏模式。
几经波折,顺利搞定。在这里分享给大家!主要分享一下解决问题的思路.
先看这段代码:
运行程序,你会看到这样的错误信息:
分析一下,先看sdk的文档怎么解释的:
大致意思,就是必须在调用setContentView()方法之前调用requestFeature (int featureId)方法。
提示:您是否注意到这句话:
myGod,怎么回事?别急,看文档:
yes,告诉您不可以设置FEATURE_CUSTOM_TITLE与其他特性联合。这个属性只可以单独用,例如下面做法是错误的。
试想一下,这中做法还是有道理的。
本身Window.FEATURE_CUSTOM就是让用户自定义的,何必添加Window.*
查看android源码可以知道,requestFeature (int featureId)方法这样的:
这里,requestFeature又调用了 Window类的requestFeature方法,刨根到底吧!
看看Window类的requestFeature方法源码:
既然sdk文档让我们这麽做,就照办喽,修改代码如下:
好啦,运行正常!到达全屏的效果。欢呼一把.....
试问一下,是不是还有什么办法修改代码,到达同样的效果?
还要看看sdk文档,关于setFlags方法的说明:
大致意思,请允许我以下面例子为证:
没错,我只是调换了代码的位置。运行代码,没有报错。
但是,点击视图中的控件如Button没有任何反应。
那么,你应该明白上面的意思就是调用setFlags方法之前,任何修饰window如requestWindowFeature需要先调用。
其实,我更加习惯这样设置全屏模式:
在代码中,定义全屏运行程序之后屏幕仍会出现瞬间的非全屏模式,如何办?
对,xml文件!!!修改manifest.xml文件如下:
如果,你只是想设置显示视图没有title的话而不想隐藏状态栏的话,可以使用Theme.NoTitleBar。即:
android:theme="@android:style/Theme.NoTitleBar">另外,说一下setFlags()与addFlags()方法之间的联系与区别。
这两个方法都是Window类的方法。
addFlags()源码:
public void addFlags(int flags) { setFlags(flags, flags); }可以看出调用setFlags()方法,但是addFlags()参数只有一个。
换句话说,代码:
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);可以修改为:
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
ok,到此为止!