2012-10-06 15 views
5

Programatik olarak bir "tema değiştirici" kurma konusunda bazı sıkıntılarım var. ben ve ne yapmam (Beyaz (Theme.Light.NoTitleBar) ve Karanlık (Theme.Black.NoTitleBar) arasında) uygulamasından geçiş temalar istiyorum geçerli:Tema değişikliği <4.0 olması gerektiği gibi çalışıyor

final String PREFS_NAME = "MyPrefsFile"; 
    final SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    final SharedPreferences.Editor editor = settings.edit(); 

ve daha: Bir SharedPreference set temaları geçiş yapmak için bir iki düğme (ikinci bir hemen hemen aynıdır)

Button ThemeWhite = (Button) findViewById(R.id.ThemeWhite); 
    ThemeWhite.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      editor.putBoolean("Theme", false); 
       editor.commit(); 
       System.exit(2); 
     } 
    }); 

ve her bir faaliyetin yalvarıyor

nasıl kontrol

boolean theme = settings.getBoolean("Theme", false); 
    if(theme){ 
     this.setTheme(R.style.Theme_NoBarBlack); 
    } else{ 
     this.setTheme(R.style.Theme_NoBar); 
    } 

    setContentView(R.layout.aplikacja); 
SharedPreference sahipBen klasör değerlerindeki dosyanın styles.xml temaları tanımlayın:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Light.NoTitleBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.NoTitleBar" /> 
yılında

değerler-v11:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Holo.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.Holo.NoActionBar" /> 
yılında

değerler-V14:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.DeviceDefault.NoActionBar" /> 

bildirim dosyası:

<application 
... 
     android:theme="@style/Theme.NoBar" > 

Her şey mükemmel çalışıyor android> 4.0 ama 2.2 kullandığınızda bu tema değişmez - bu olabilir ama orada gerektiği gibi sadece yazı beyaz oluyor koyu arka plan yok.

En azından çalışır ve Theme.NoBarBlack değerlerinde (android < 3.0 için) ve değerinin Theme.NoBar ile değiştirilip değiştirilmediğini kontrol ettim. .

DÜZENLEME (SORUN BULUNAMADI): Yani denedikten sonra, Android 2.2 Bildiri dosyası set Arka Plan ve dinlenme ve programlı değiştirme konusunda tema yalnızca metin rengini etkilediği söndürmeye. herhangi bir fikir neden bu olur? (Ben 10 ünü yok gibi)

CEVAP:

super.onCreate(savedInstanceState); 

tema kurma ya da değil önce mi eğer günü 3.0 < android fark eder. Yoktan sorununu yapmak için

public void onCreate(Bundle savedInstanceState) { 
    setTheme(R.style.Theme_NoBar); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lista); 
} 

Maalesef adamlar ama> 3.0 üzerinde çalışıyordu olarak karıştı:

Yani olmalıdır. Günün yarısını bunun üzerinde harcıyor ama çalışıyor. :)

cevap

3

Theme.NoBarBlack için styles.xml: kodunuzda bir hata var, üst öğesini @android:style/Theme.NoActionBar olarak ayarladınız, ancak mevcut değil.

@android:style:Theme.NoTitleBar'u kastediyorsunuz.

+0

Teşekkürler, ama bu hata, temaları değiştiren katiyen deneyler yaparken denedim ve onu değiştirmeyi ve kopyalayıp yapıştırmayı burada unuttum. Yani başka bir şey bu garip davranışa neden olmalı. –

+0

İyi bir tahmin, ancak Theme.NoTitleBar bu API düzeyinde mevcut değil. Theme.Black.NoTitleBar olması gerekiyor –

+0

@StephanBranczyk [Android Belgeleri] (http://developer.android.com/reference/android/R.style.html#Theme_NoTitleBar), "Theme.NoTitleBar" API seviyesinden beri mevcut olduğunu söylüyor 1. – Kyriog

İlgili konular