2012-08-01 23 views
11

Uygulamamdaki PreferenceActivity konusundaki temayı değiştirmeye çalışıyorum ve bunu işe alamıyorum. PreferenceActivity teması nasıl değiştirilir?

Bu

xml geçerli:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

     <SwitchPreference android:title="Auto Clear" android:key="autoclear" android:summary="Clear the command line when the code is being executed." android:defaultValue="false"/> 
     <ListPreference android:title="Choose a theme" android:negativeButtonText="" android:dialogTitle="" android:key="theme" android:entries="@array/themesList" android:entryValues="@array/themesList" android:defaultValue="Default" /> 

</PreferenceScreen> 

Ve bu PreferenceActivity geçerli:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    this.setTheme(R.style.AppTheme); 

    addPreferencesFromResource(R.xml.preferences); 

} 

Ve sonuç:

Result

+0

sizin için tüm uygulama ya da sadece PreferenceActivity temasını değiştirmek istiyor musunuz? –

+0

bunları gördünüz. http://udinic.wordpress.com/2011/08/18/dress-up-your-preferenceactivity/ http://liquidlabs.ca/2011/10/17/override-android-preference-activity-colors/ – san

cevap

16

üzerinde tema uygulayarak denediniz bildirimde etkinlik etiketi İşte daha önce yapmış nasıl -

<activity 
    android:label="@string/app_name" 
    android:name="com.example.MyPreferenceActivity" 
    android:theme="@android:style/Theme.Black" 
    android:exported="true" 
    android:icon="@drawable/ic_launcher"></activity> 

EDIT: deneyebilirsin

Diğer seçenek onApplyThemeResource(Resources.Theme theme, int resid, boolean first) geçersiz etmektir. Android kaynak koduna bakıldığında setTheme dahili olarak yöntemi çağırır. Eğer arka plan değiştirmek isterseniz

/** 
* Called by {@link #setTheme} and {@link #getTheme} to apply a theme 
* resource to the current Theme object. Can override to change the 
* default (simple) behavior. This method will not be called in multiple 
* threads simultaneously. 
* 
* @param theme The Theme object being modified. 
* @param resid The theme style resource being applied to <var>theme</var>. 
* @param first Set to true if this is the first time a style is being 
*    applied to <var>theme</var>. 
*/ 
protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { 
    theme.applyStyle(resid, true); 
} 
+0

Ancak temayı programatik olarak değiştirmek istiyorum, çünkü ayarlarda kullanıcı temayı değiştirebilir. Bu yüzden PreferenceActivity başladığında temayı kod aracılığıyla değiştirmek istiyorum. –

+0

Ahh Anladım. Gönderiyi yukarıda güncelledim. Umarım sorunu çözmenize yardımcı olur. – shri046

+0

Thanx man !!! işe yaradı!!! –

4

Eğer

public class FractalPreferenceActivity extends PreferenceActivity { 
    ....... 

    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setBackgroundDrawableResource(R.drawable.gradient); 
    getListView().setBackgroundColor(Color.TRANSPARENT); 
    getListView().setCacheColorHint(Color.TRANSPARENT); 

      ....... 
    } 

} Sonunda

+0

Sadece arka plan değil, R.style.AppTheme tamamen yeni bir tema. –

8

i

(java kodu aracılığıyla) programlı "PreferenceActivity" temasını değiştirmek nasıl bulundu kullanabilirsiniz

Temayı değiştirmek için şunu yapın:

 @Override 
     public void onCreate(Bundle savedInstanceState) { 
     setTheme(R.style.Holo_Theme_Light); 
     super.onCreate(savedInstanceState); 
     } 

super.onCreate(savedInstanceState); yönteminden önce her zaman setTheme(R.style.yourtheme); yöntemini arayın. Bunu yaparak, aşağıda gösterildiği gibi sonuç üretecektir. hepsi

enter image description here

.

super.onCreate(savedInstanceState); yönteminden sonra setTheme(R.style.yourtheme); yöntemini çağırırsanız, yöntem aşağıda gösterildiği gibi üretilir.

enter image description here

Not: Temalar iç içe PreferenceScreen tarafından fark edilmez. Bu iç içe PreferenceScreen'e tema uygulamak için, iç içe PreferenceScreen için başka bir PreferenceActivity yapmanız ve orada setTheme(R.style.yourtheme); yöntemini çağırmanız gerekir.

0

Ben şahsen bu yaklaşımı kullanın: API 11'in altında ben (değerler dizin, themes.xml dosyası) kullanın: daha yüksek (örneğin değerleri-V14 dizini için, temalar için

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="MyTheme" parent="@android:style/Theme.Light.NoTitleBar"></style> 

</resources> 

.xml dosyası):

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <style name="MyTheme" parent="@android:style/Theme.Holo.Light.NoActionBar"></style> 

</resources> 

ve tezahür:

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

Android otomatik cihazın API tabanlı bir tema seçecek ve (apaçık) ya da dilbilgisi kodunda faaliyetlerinde hiçbir tema belirtmek gerek .. .

themes

0

aptalca gelecek ama setTheme() kullanarak tüm parçaları üzerinde çalışmak, ancak ana prefe olacak rens aktivitesi. Bunu manifest dosyasında ayarlayın ve aniden çalışmaya başlayacaktır.

I (o da ben tarzlarda ayarlamak istemiyorum temaya göre değiştirilebilir çeşitli renk ve drawables dışarı doles tema yöneticisi nesneden onCreate önce setTheme() arayarak, kullanıcı tercihlerine göre dinamik olarak tema ayarlamak. .. esas olarak ne olduğunu anlamaya çok kafa karıştırıcı çünkü).

manifest'te ayarlayarak Hiçbir fikrim neden setTheme() işi yapar. Sanırım tercih aktivitesine özgü bir kaç aksaklık var.

İlgili konular