1.setTheme(int resid)方法用来设置其窗口的风格,例如:显示、以对话框显示窗口等
2.对比:
在AndroidManifest.xml文件中,可以对每一个Activity设置android:theme
theme的设置 可以设置为系统自带的格式,也可以自定义格式。
A: 系统自带格式
@android:style/Theme.Black //背景黑色-有标题-非全屏
@android:style/Theme.Black.NoTitleBar //背景黑色-无标题-非全屏
@android:style/Theme.Black.NoTitleBar.Fullscreen //背景黑色-无标题-全屏显示
@android:style/Theme.Dialog //对话框显示
@android:style/Theme.InputMethod
@android:style/Theme.Light //背景白色-有标题-非全屏
@android:style/Theme.Light.NoTitleBar //背景白色-无标题-非全屏
@android:style/Theme.Light.NoTitleBar.Fullscreen //背景白色-无标题-全屏显示
@android:style/Theme.Light.Panel
@android:style/Theme.Light.WallpaperSettings //背景透明
@android:style/Theme.NoDisplay
@android:style/Theme.Translucent.NoTitleBar.Fullscreen //半透明、无标题栏、全屏
@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen
可以在单个Activity里设置,也可以在applicaiton里全局设置。比如:
<activity android:screenOrientation="portrait" android:name=".ui.RegisterActivity" android:theme="@android:style/Theme.NoTitleBar"></activity>
B:也可以自定义
在activity里加入 android:theme="@style/MyTitleBar" 再在 style.xml里加入
<style name="MyTitleBar" parent="android:Theme">
<item name="android:windowTitleSize">50dip</item>
<item name="android:windowTitleBackgroundStyle">@style/MyTitleBackground</item>
<item name="android:windowTitleStyle">@style/WindowTitle</item>
</style>
<!-- 自定义标题栏背景图 -->
<style name="MyTitleBackground" parent="android:TextAppearance.WindowTitle">
<item name="android:background">@drawable/bg_topbar</item>
</style>
<style name="WindowTitle" parent="android:TextAppearance.WindowTitle">
<item name="android:singleLine">true</item>
</style>
这里的parent是继承于android:Theme,所以在下面的样式里,只能是window开头的样式才起作用,所有样式请参考\sdk\docs\reference\android\R.attr.html,
也可以设置windowTitleBackgroundStyle 为@style/MyTitleBackground,这样就可以在MyTitleBackground里,设置背景图啦,
3.用法
1,常规方法:
setTheme调用在创建任何activity子view之前,即:
onCreate {
super.onCreate();
setTheme();
setContentView();
}
但由于android一个已知的bug,某些设置了fullScreen属性的style设置会失败,这里需要使用另外的方法
1,先在manifest里给activity设置默认主题
<activity ... android:theme="@android:style/Theme.Dialog">
...
2,在代码中复写setTheme方法:
@Override
public void setTheme(int resid) {
boolean flag = ... ; //一些程序需要的区分判断
super.setTheme(flag? android.R.style.Theme : resid);
}