Kotlin: setTheme不改变主题颜色(透明)



如何通过编程方式更改主题?

<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.

    最新更新