UI效果(1):实现Activity全屏

时间:2021-09-07 10:05:59

在开发的过程中,为了增加更好的视图效果,需要将当前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,到此为止!