gpt4 book ai didi

android - 更改主题不起作用

转载 作者:行者123 更新时间:2023-11-30 03:11:10 26 4
gpt4 key购买 nike

我正在尝试更改我的主题,选择一个 BaseExpandableListAdapter 选项。我可以选择选项,而且它似乎运行正常。我在 Log 中取得了不错的成绩。但是主题不会改变。有人可以帮忙吗?我可能缺少什么?

这是我的 MainActivity 的一部分:

public class MainActivity extends Activity {

static final int THEME_REQUEST = 1;

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == THEME_REQUEST) {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
System.out.println("Troca tema: " + bundle.getInt("theme"));
alteraTema(bundle.getInt("theme"));
}
}
}

public void alteraTema(int sTheme) {
switch (sTheme)
{
default:
case 0:
System.out.println("Tema BA");
this.setTheme(R.style.JUCEB);
this.recreate();
break;
case 1:
System.out.println("Tema ES");
this.setTheme(R.style.JUCEES);
this.recreate();
break;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (Configuracao.urlApi == null){
Intent intent = new Intent(MainActivity.this, Configuracao.class);
startActivityForResult(intent, THEME_REQUEST);
}

这是我的 styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light"></style>

<!-- Application theme. -->
<style name="Inicial" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/Inicial.ActionBar</item>
</style>

<style name="Inicial.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:background">@drawable/logo_generico</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:titleTextStyle">@style/NoTitleText</item>
<item name="android:subtitleTextStyle">@style/NoTitleText</item>
</style>

<style name="JUCEES" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/JUCEES.ActionBar</item>
</style>

<style name="JUCEES.ActionBar" parent="@android:style/Widget.Holo.ActionBar">
<item name="android:background">@drawable/logo_es</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:titleTextStyle">@style/NoTitleText</item>
<item name="android:subtitleTextStyle">@style/NoTitleText</item>
</style>

<style name="JUCEB" parent="AppBaseTheme">
<item name="android:actionBarStyle">@style/JUCEB.ActionBar</item>
</style>

<style name="JUCEB.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
<item name="android:background">@drawable/logo_ba</item>
<item name="android:icon">@android:color/transparent</item>
<item name="android:titleTextStyle">@style/NoTitleText</item>
<item name="android:subtitleTextStyle">@style/NoTitleText</item>
</style>

<style name="NoTitleText">
<item name="android:textSize">0sp</item>
<item name="android:textColor">#00000000</item>
</style>

更新 1

我做了这些改变:

public void alteraTema(int sTheme) {
switch (sTheme)
{
case 0:
temaEscolha = (R.style.JUCEB);
setTheme(temaEscolha);
System.out.println("Tema BA");
break;
case 1:
temaEscolha = (R.style.JUCEES);
setTheme(temaEscolha);
System.out.println("Tema ES");
break;
}

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(temaEscolha);
setContentView(R.layout.activity_main);

现在我可以为每个 Activity 更改主题,Main_Activity 除外。而且它仅在我第一次更改主题时有效。当我再次尝试更改时,不起作用。

更新 2

我这样做了:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == THEME_REQUEST) {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
System.out.println("Troca tema: " + bundle.getInt("theme"));
alteraTema(bundle.getInt("theme"));
startActivity(getIntent());
finish();
}
}
}

在我的 Confi.java 中,我的选择在哪里,我有这个:

    private void finishWithResult() {
Intent intent = new Intent();
intent.putExtra("theme", Selecao);
setResult(Activity.RESULT_OK, intent);
finish();
}

已解决

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == THEME_REQUEST) {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
System.out.println("Troca tema: " + bundle.getInt("theme"));
alteraTema(bundle.getInt("theme"));
finish();
startActivity( getIntent() );
}
}
}

最佳答案

必须在调用 setContentView() 之前设置主题(参见 documentation )。设置完成后,您无法更改主题,只能通过重新启动 Activity 来更改。因此,在您的 onActivityResult 方法中,您需要遵循以下原则:

    startActivity( getIntent() );
finish();

当然你必须以某种方式记住所选主题(SharedPreferences 或将其放在 Intent 中)。

另见这篇文章:https://stackoverflow.com/a/11576546/534471

关于android - 更改主题不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20955257/

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