我有一个活动(MainActivity.java),它在加载主要片段且其他功能在后台进行时用作启动屏幕。此启动屏幕始终显示棕色图块背景和图标。我要显示的是仅在变量dayMode为false(在Constants.java中为变量)时显示背景(在R.style.AppTheme_NoActionBar_LauncherNight中)。否则,背景应为R.style.AppTheme_NoActionBar_LauncherDay中的背景(白色背景和相同的图标)。
如果我在清单的android:theme部分中指定一个或另一个背景,则显示效果很好。但是我想要的是根据dayMode的值,在活动的onCreate方法上以编程方式设置一个主题或另一个主题。这是行不通的。
我在调用super.onCreate或setContentView之前尝试使用setTheme,正如我在其他答案中所读到的那样,但是它不起作用。我只能找到解释您应调用setTheme和setContentView的顺序的答案,但它们不能解决此问题。
我的风格:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="autoCompleteTextViewStyle">@style/cursorColor</item>
<item name="android:textColorSecondary">@color/yellow_light</item>
</style>
<style name="AppTheme.NoActionBar.LauncherNight">
<item name="android:windowBackground">@drawable/launch_screen</item>
</style>
<style name="AppTheme.NoActionBar.LauncherDay">
<item name="android:windowBackground">@drawable/launch_screen_day</item>
</style>
我的清单:
<activity
android:name="com.AlbaRam.myApp.MainActivity"
android:configChanges="keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar.LauncherNight"
android:launchMode="singleInstance"
android:windowSoftInputMode="stateAlwaysHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
我的ActivityMain:
@Override
protected void
onCreate(Bundle savedInstanceState) {
//This is not working
if (Constants.dayMode){
super.setTheme(R.style.AppTheme_NoActionBar_LauncherDay);
} else {
setTheme(R.style.AppTheme_NoActionBar_LauncherNight);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//rest of functionality
}
答案 0 :(得分:1)
尝试使用此代码
theme.xml
<resources>
<style name="AppThemeLight" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>
<style name="AppThemeDark" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
</style>
<!-- This will set the fade in animation on all your activities by default -->
<style name="WindowAnimationTransition">
<item name="android:windowEnterAnimation">@android:anim/fade_in</item>
<item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
活动
@Override
protected void onCreate(Bundle savedInstanceState) {
AppSettings settings = AppSettings.getInstance(this);
setTheme(settings.getBoolean(AppSettings.Key.USE_DARK_THEME) ? R.style.AppThemeDark : R.style.AppThemeLight);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transition_theme);
//
}
答案 1 :(得分:1)
public void onCreate(Bundle savedInstanceState) {
if (Constants.dayMode){
setTheme(android.R.style.yourTheme);
} else {
setTheme(android.R.style.yourTheme);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.actvity);
}
答案 2 :(得分:0)
经过一些研究,我发现这是不可能的。当我们要在加载主要功能时显示某些东西时,会使用启动屏幕,因此我们将要显示在清单中的可绘制对象包括在内,以使它在加载主要活动时快速显示。清单中的启动屏幕会出现在其他所有内容之前,因此,如果我们可以动态更改启动屏幕的主题,那么在加载其他所有内容时,我们将失去快速显示的功能。