Android中如何通过代码全局设置windowIsTranslucent为false
解决Android全局主题windowIsTranslucent动态切换问题
方案一:通过新增主题实现全局生效
- 在
res/values/styles.xml中创建继承原有主题的新样式,覆盖透明属性:<style name="AppTheme.NoTranslucent" parent="AppTheme"> <item name="android:windowIsTranslucent">false</item> </style> - 在第一个Activity的
onCreate()方法中,**优先于super.onCreate()**设置新主题:@Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.AppTheme_NoTranslucent); super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); } - 全局生效处理:
- 若项目有基类Activity,将
setTheme(R.style.AppTheme_NoTranslucent)放在基类的onCreate()开头,所有子类Activity自动继承该设置; - 也可在Application的
onCreate()中调用setTheme(R.style.AppTheme_NoTranslucent),确保整个应用启动后默认使用非透明主题。
- 若项目有基类Activity,将
方案二:直接修改Window属性(需全局复用代码)
如果不想新增主题,可直接在Activity中修改Window的透明状态,建议封装到基类避免重复代码:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); // 取消窗口透明标记 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); // 设置窗口为不透明背景(可选,根据需求调整颜色) getWindow().setBackgroundDrawable(new ColorDrawable(Color.WHITE)); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); }
重要提示
- 动态设置主题必须在
super.onCreate()和setContentView()之前执行,否则主题修改不会生效; - 若使用Application全局修改主题,需注意启动时的页面闪烁问题,可配合启动页过渡优化。
内容的提问来源于stack exchange,提问作者rahim
相关产品推荐
相关产品推荐

