gpt4 book ai didi

java - Android:在java中更改应用程序主题

转载 作者:行者123 更新时间:2023-12-01 12:27:26 25 4
gpt4 key购买 nike

我正在尝试构建一个多主题应用程序。我想在java代码中设置整个应用程序的主题。可以在Manifest文件中以XML方式设置:

<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/myTheme" >

我将选定的主题 ID 存储在 SharedPreferences 中。我在启动器 Activity 中尝试了以下代码:

getApplicationContext().setTheme(R.style.mainTheme2); 
setContentView(R.layout.activity_action_selection);

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

getApplication().setTheme(R.style.mainTheme2);
setContentView(R.layout.activity_action_selection) ;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////

setTheme(R.style.mainTheme2);
setContentView(R.layout.activity_action_selection) ;

最后的代码更改了 Activity 主题,但没有更改应用程序主题!别人并没有改变什么!

如何在java代码中更改应用程序主题?!

最佳答案

当主题更改时,您存储的内容可能与此类似:

SharedPreferences prefs = getSharedPreferences("theme", Context.MODE_PRIVATE);
prefs.edit().putInt("resId", R.style.Theme_AppCompat).commit();

当您将当前选定的主题 ID 存储在 SharedPreferences 中时,您唯一要做的就是读取任何 ActivityonCreate 中的值你想像这样尊重这个主题:

public class ThemedActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// read current custom theme from preferences
SharedPreferences prefs = getSharedPreferences("theme", Context.MODE_PRIVATE);
int resId = prefs.getInt("resId", R.style.Theme_AppCompat_Light);
setTheme(resId);

// business as usual
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
}
}

如果您想立即将主题应用到当前 Activity ,请在更改 SharedPreferences 后重新启动它:

startActivity(getIntent()); // this comes first to ensure valid context
finish();

关于java - Android:在java中更改应用程序主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26204601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com