在我的Android应用程序中,我正在尝试实现更改Theme
。我设法改变了我想要的一切颜色,并且运行时的主题效果很好(我使用SharedPreferences
来存储所选择的颜色)。
然而,当我从头开启应用程序时,首先默认主题是可见的(确切地说是ActionBar
颜色)并且仅在一两秒之后,当应用程序加载时,颜色变为一个取自SharedPreferences
。
那么如何更改默认Theme
?或者有没有办法在加载时改变颜色?
更新:我在onCreate
中应用主题并且这还不够。
答案 0 :(得分:1)
我对此的通常建议是在清单中使用透明的全屏主题。
启动活动时,请切换到自定义主题。
结合这一点,我总是建议从应用程序主题到活动主题的淡入淡出的alpha动画。当自定义主题出现时,这可以防止对用户产生震动。
清单主题定义为:
android:theme="@android:style/Theme.Translucent.NoTitleBar"
基本活动onCreate()
方法:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// set your custom theme here before setting layout
super.setTheme(android.R.style.Theme_Holo_Light_DarkActionBar);
setContentView(R.layout.activity_main);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
基本淡出:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
基本淡出(不是真的需要,但为了完整性):
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
有关此问题的进一步相关讨论,请查看我对此相关问题的答案:
答案 1 :(得分:0)
当app首次加载onCreate()时,首先执行方法。 所以检查这里的条件并应用theme.Also也做同样的OnResume()..也。
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
LinearLayout ml1 = (LinearLayout) findViewById(R.id.ml1);
pref = new MySharedPreference();
color = MySharedPreference.getColorCode(getApplicationContext());
switch (color) {
case 1:
ml1.setBackgroundResource(R.drawable.woodenback1);
break;
case 2:
ml1.setBackgroundResource(R.drawable.woodenback2);
break;
case 3:
ml1.setBackgroundResource(R.drawable.woodenback3);
break;
case 4:
ml1.setBackgroundResource(R.drawable.blueback);
break;
case 5:
ml1.setBackgroundResource(R.drawable.leavesback);
break;
}
} catch (Exception e) {
}
答案 2 :(得分:0)
实际上你应该在res / values / styles.xml中定义你的样式。我想你现在有了以下配置:
<style name="AppBaseTheme" parent="android:Theme.Holo.Light"/>
<style name="AppTheme" parent="AppBaseTheme"/>
所以如果你想使用Theme.Black然后将AppBaseTheme父改为android:Theme.Black,你也可以直接在manifest文件中更改app样式 - android:theme =“@ android:style / Theme.Black”。你必须在样式标记
之前缺少android命名空间答案 3 :(得分:0)
你可以这样做:
String m_theme = "yourThemeName";
final int themeID = activity.getResources().getIdentifier(m_theme,
"style", activity.getPackageName());
activity.setTheme(themeID);