如何通过编程方式更改主题?
<resources>
<style name="Pet.Theme.Transparent" parent="AppTheme.NoBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
</resources>
- 清单
- 活动
<activity android:name="com...PetTransparentActivity" />
class PetTransparentActivity : PetBaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
if (missionArgs.isTransparent) {
Log.d("Activity", "Transparent")
setTheme(R.style.Pet_Theme_Transparent)
} else {
Log.d("Activity", "Not Transparent")
setTheme(R.style.AppTheme_NoBar)
}
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT != Build.VERSION_CODES.O) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
}
setContentView(R.layout.pet_activity_transparent)
startScreenNavigation()
}
}
当我运行上面的代码时,主题没有改变。但是如果从manifest
中改变主题,它就起作用了。
<activity
android:name="com...PetTransparentActivity"
android:theme="@style/Pet.Theme.Transparent"/>
如何使我的代码工作,所以我可以从PetTransparentActivity
更改主题?
just put
if (missionArgs.isTransparent) {
Log.d("Activity", "Transparent")
setTheme(R.style.Pet_Theme_Transparent)
} else {
Log.d("Activity", "Not Transparent")
setTheme(R.style.AppTheme_NoBar)
}
后super.onCreate(savedInstanceState)
这不是最好的,但对我有用。
我通过创建另一个支持透明或不透明的活动来修复它。
- ActivityA (Transparent using AndroidManifest.xml)
- ActivityB(不透明使用AndroidManifest.xml)
两个活动替换相同的Fragment.