如何以编程方式更改应用程序的默认主题?

时间:2014-05-17 11:02:38

标签: android android-layout themes android-theme

在我的Android应用程序中,我正在尝试实现更改Theme。我设法改变了我想要的一切颜色,并且运行时的主题效果很好(我使用SharedPreferences来存储所选择的颜色)。

然而,当我从头开启应用程序时,首先默认主题是可见的(确切地说是ActionBar颜色)并且仅在一两秒之后,当应用程序加载时,颜色变为一个取自SharedPreferences

那么如何更改默认Theme?或者有没有办法在加载时改变颜色?

更新:我在onCreate中应用主题并且这还不够。

4 个答案:

答案 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命名空间

How to change app default theme to a different app theme?

答案 3 :(得分:0)

你可以这样做:

String m_theme = "yourThemeName";
final int themeID = activity.getResources().getIdentifier(m_theme,
                    "style", activity.getPackageName());
activity.setTheme(themeID);