2014-01-06 2 views
0

BaseExpandableListAdapter 옵션을 선택하여 테마를 변경하려고합니다. 옵션을 선택할 수 있으며 OK를 실행하는 것으로 보입니다. 로그에서 좋은 결과를 얻었습니다. 그러나 테마는 바뀌지 않습니다. 아무도 도와 줄 수 있니? 나는 무엇을 놓칠 수 있 었는가?테마 변경이 작동하지 않습니다.

<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 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입니다 : 여기

MainActivity의 일부입니다

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); 

는 지금은 Main_Activity를 제외하고, 모든 활동에 대한 테마를 변경할 수 있어요. 그리고 테마를 처음 변경하는 경우에만 작동합니다. 변경을 다시 시도하면 작동하지 않습니다.

업데이트 2

나는이 않았다

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")); 
      startActivity(getIntent()); 
      finish(); 
     } 
    } 
} 

그리고 내 Confi.java에서

이 어디 내 선택이다, 나는이 있습니다
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()); 
     } 
    } 
} 

답변

0

테마는 setContentView()를 호출하기 전에 설정해야합니다 (documentation 참조). 설정이 끝나면 테마를 변경할 수 없으며 활동을 다시 시작하십시오. 물론

startActivity(getIntent()); 
    finish(); 

어떻게 든 (된 SharedPreferences를 또는 의도에 넣어) 선택한 테마를 기억해야한다 : 그래서 당신의 onActivityResult를 방법에 당신은이 라인을 따라 뭔가가 필요합니다.

이 게시물을 참조하십시오 : https://stackoverflow.com/a/11576546/534471

+0

고맙습니다! 하지만이 방법은 하나의 활동 테마 만 변경하는 것이지 전체 앱을 변경하는 것이 아닙니다. 모든 활동에 테마를 변경해야합니다. – AllMac

+0

protected void onCreate (savedBundle savedInstanceState) { \t \t super.onCreate (savedInstanceState); \t \t setTheme (R.style.JUCEES); \t \t setContentView (R.layout.activity_main); – AllMac

+0

네, 하나의 액티비티에 대한 테마를 변경합니다. 코드에서 테마를 선택하면 각 활동에 테마를 설정해야합니다. 당신은 액티비티를 확장하는 자신 만의 액티비티 클래스 (MyActivity와 같은)를 구현할 수 있으며 onCreate()에 테마를 설정합니다. 각 Activity 클래스는 myActivity를 확장하고 setContentView를 호출하기 전에 super.onCreate를 호출합니다. –