Android 主题 Theme 的使用总结

目录导向

  • 1.设置全屏【应用广泛】
    • 1.1 style设置
    • 1.2 直接设置
    • 1.3 代码设置
  • 2.Theme主题大全
  • 3.设置窗体透明度,昏暗度,背景模糊处理
    • 3.3 透明度
    • 3.2 昏暗度
    • 3.3 背景模糊

image

1.设置全屏【应用广泛】

1.1 style设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
在style文件中
<style name="AppTheme" parent="AppBaseTheme">
<!-- 设置无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 设置全屏 -->
<item name="android:windowFullscreen">true</item>
</style>

在AndroidManifest.xml中 【Application或者某个Activity节点下引用】
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
</application>

应用Application范围;在AndroidManifest.xml中的application节点中设置theme属性,主题theme应用到整个应用程序中。
代码如下:
<application
Android:icon=”@drawable/icon”
Android:icon=”@string/app_name”
Android:icon=”@android:style/ Theme.Black.NoTitleBar”>
活动Activity范围;使用java代码或者在AndroidManifest.xml中对活动Activity的主题进行设置,主题仅应用到当前活动中。
在AndroidMainifest.xml设置方法:代码如下:
<activity
android:name=“.About”
android:label=“@string/app_name”
android:theme=“@android:style/ Theme.Black.NoTitleBar” >

1.2 直接设置

  • 在AndroidManifest.xml中根据需要在或中使用自定义的Android主题方式进行设置。
    android:theme=”@style/theme_fullScreen”

1.3 代码设置

1
2
3
4
5
//取消标题 
this.requestWindowFeature(Window.FEATURE_NO_TITLE);或
requestWindowFeature(R.style.AppTheme);
//全屏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

2.Theme主题大全

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
窗口主题设置:(这里主要对于Activity设置,用到系统自动主题内容)
•android:theme=”@android:style/Theme.Dialog” 将一个Activity显示为能话框模式
•android:theme=”@android:style/Theme.NoTitleBar” 不显示应用程序标题栏
•android:theme=”@android:style/Theme.NoTitleBar.Fullscreen” 不显示应用程序标题栏,并全屏
•android:theme=”Theme.Light” 背景为白色
•android:theme=”Theme.Light.NoTitleBar” 白色背景并无标题栏
•android:theme=”Theme.Light.NoTitleBar.Fullscreen” 白色背景,无标题栏,全屏
•android:theme=”Theme.Black” 背景黑色
•android:theme=”Theme.Black.NoTitleBar” 黑色背景并无标题栏
•android:theme=”Theme.Black.NoTitleBar.Fullscreen” 黑色背景,无标题栏,全屏
•android:theme=”Theme.Wallpaper” 用系统桌面为应用程序背景
•android:theme=”Theme.Wallpaper.NoTitleBar” 用系统桌面为应用程序背景,且无标题栏
•android:theme=”Theme.Wallpaper.NoTitleBar.Fullscreen” 用系统桌面为应用程序背景,无标题栏,全屏
•android:theme=”Translucent” 半透明
•android:theme=”Theme.Translucent.NoTitleBar”
•android:theme=”Theme.Translucent.NoTitleBar.Fullscreen”
•android:theme=”Theme.Panel”
•android:theme=”Theme.Light.Panel”

3.设置窗体透明度,昏暗度,背景模糊处理

3.3 透明度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 设置页面的透明度
* 主要作用于:弹窗时设置宿主Activity的背景色
* @param bgAlpha 1表示不透明
*/
public static void setBackgroundAlpha(Activity activity, float bgAlpha) {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.alpha = bgAlpha;
Window window = activity.getWindow();
if(window!=null){
if (bgAlpha == 1) {
//不移除该Flag的话,在有视频的页面上的视频会出现黑屏的bug
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
} else {
//此行代码主要是解决在华为手机上半透明效果无效的bug
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
window.setAttributes(lp);
}
}

3.2 昏暗度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
* 设置页面的昏暗度
* 主要作用于:弹窗时设置宿主Activity的背景色
* @param bgDimAmount
*/
public static void setBackgroundDimAmount(Activity activity, float bgDimAmount){
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.dimAmount = bgDimAmount;
Window window = activity.getWindow();
if(window!=null){
if(bgDimAmount == 1){
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}else {
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
window.setAttributes(lp);
}
}


/**
* 设置页面的透明度
* 主要作用于:弹窗时设置宿主Activity的背景色
* @param bgAlpha 1表示不透明
*/
public void setBackgroundAlpha(float bgAlpha) {
Dialog dialog = getDialog();
if(dialog!=null){
Window window = dialog.getWindow();
if(window!=null){
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.alpha = bgAlpha;
if (bgAlpha == 1) {
//不移除该Flag的话,在有视频的页面上的视频会出现黑屏的bug
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
} else {
//此行代码主要是解决在华为手机上半透明效果无效的bug
window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
window.setAttributes(lp);
}
}
}