(1)默认theme代码如下:

运行结果:

视觉效果:ActionBar为Dark,背景为Light。

 

 

 

 

(2)将theme改为Light:

运行结果:

视觉效果:ActionBar和背景都为Light。

 

(3)与默认theme效果相同的Theme.Holo.Light.DarkActionBar:

 

出现错误:这个指令只能用于API level 14以上的版本。

 

修改后就没错了吧

 

恩 妥妥的了 运行来庆祝一下

 

视觉效果:看起来与默认theme效果完全相同,用“看起来”是因为笔者暂时还不确定它们是否有区别。

 

(4)将theme修改为Theme.Holo

 

运行结果:

 

视觉效果:ActionBar和背景都变为Dark。

 

(5)试一下将theme一段删去:

运行结果:同(4)。别打我……我并非有意偷懒,因为这个贴图实在是太麻烦了,这个结果有无穷种可能,没办法列举穷尽。

是这样的:其实有规律可循,并不是没有使用theme就使用默认的theme。它将会运行最近最后一次有theme时生成的app。所以theme自然也是上一次的theme。如果最后一次的theme设为ActionBar和文本都为Dark,删去theme后下次也是这样;如果最后一次的theme设为ActionBar和文本都为Light,删去theme后下次也是这样;如果……不码了……。应该都懂的了,恩……

 

(6)重点:

在manifest.XML文件中,<application>下的theme修改后会应用到app全局;在单个<activity>下的theme设置只会应用到单一的activity中。没图说个丁日,所以上图顶万言:

 

 

前面的几组测试都是在<application>下修改theme的。所以所有Activity——无论是第一个MainActivity还是第二个DisplayMessageActivity,显示的theme都一样。

 

下图将删去<application>下的theme,分别将MainActivity和DisplayMessageActivity的theme设为@android : style/theme.Holo(Dark) 和

@android : style/theme.Holo.Light (Light) ,你会发现,你会讶异,你是我最压抑最深处的秘密:

 

没有任何问题了,跟预期想的完全吻合。

 

接下来再尝试<application>和每个<activity>的theme同时进行设置(为了有更直观的结果,将<application>设为 @android : style/Theme.Holo(Dark);下面两个<activity>设为 @android : style/Theme.Holo.Light(Light)):

 

运行结果是两个activity的Theme都是Light。因此可以得出结论:单个的<activity>的theme设置将覆盖<application>的theme设置。可理解为<activity>是<application>的子类,子类<activity>的theme方法覆盖了父类<application>的theme方法,因此调用子类<activity>的版本。

posted on 2015-09-04 19:37  SharpeyeKardel  阅读(3271)  评论(0编辑  收藏  举报