(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>的版本。