2012-12-02 13 views
5

मुझे पता है कि यह संभव है, इसलिए यदि मेरे पास एक सेटिंग है जो मैं होलो के बीच बदल सकता हूं। लाइट और होलो, हालांकि, मुझे यह पता लगाना प्रतीत नहीं होता है कि कैसे। सभी मदद की सराहना की है!मैं ऐप के भीतर से होलो डार्क/लाइट थीम में कैसे बदलूं?

उत्तर

7

मुझे लगता है कि आप इसे setTheme() विधि का उपयोग करके कर सकते हैं। setContentView का उपयोग करने से पहले बस यह सुनिश्चित करें कि आप इसे कॉल करते हैं, या यह काम नहीं करेगा।

उदाहरण के लिए:

if(userChoice ==1){ 
    setTheme(android.R.style.Theme_Holo_Light); 
else if(userChoice == 2){ 
    setTheme(android.R.style.Theme_Holo); 
} 

विषयों की एक सूची पाया जा सकता है here

7

जवाब पर एक टिप्पणी पोस्ट आपके द्वारा डिफ़ॉल्ट Holo विषय-वस्तु के बीच टॉगल करने की जरूरत है, इस का उपयोग के अनुसार:

if (mThemeId == R.style.AppTheme.Dark) { 
     mThemeId = android.R.style.Theme_Holo_Light; 
    } else { 
     mThemeId = android.R.style.Theme_Holo; 
    } 
this.recreate(); 

अपनी Styles.XML फ़ाइल से अपने स्वयं के कस्टम परिभाषित विषयों का उपयोग करने के लिए। उदाहरण के लिए, कुछ इस तरह:

<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar" /> 

<style name="ActionBar.Light" parent="@style/ActionBar"> 
    <item name="android:background">@color/actionbar_background_light</item> 
</style> 

<style name="ActionBar.Dark" parent="@style/ActionBar"> 
    <item name="android:background">@color/actionbar_background_dark</item> 
</style> 

<style name="AppTheme.Light" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/ActionBar.Light</item> 
    <item name="android:windowActionBarOverlay">true</item> 
    <item name="listDragShadowBackground">@android:color/background_light</item> 
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_light</item> 
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_light</item> 
    <item name="menuIconShare">@drawable/ic_menu_share_holo_light</item> 
</style> 

<style name="AppTheme.Dark" parent="@android:style/Theme.Holo"> 
    <item name="android:actionBarStyle">@style/ActionBar.Dark</item> 
    <item name="android:windowActionBarOverlay">true</item> 
    <item name="listDragShadowBackground">@android:color/background_dark</item> 
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item> 
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item> 
    <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item> 
</style> 

अपने Activity में एक ग्लोबल चर के रूप में इस परिभाषित करें:

private int mThemeId = -1; 

और इस तरह अपने OnCreate() विधि सेट:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(savedInstanceState != null) { 
     if (savedInstanceState.getInt("theme", -1) != -1) { 
      mThemeId = savedInstanceState.getInt("theme"); 
      this.setTheme(mThemeId); 
     } 
     mTitlesHidden = savedInstanceState.getBoolean("titlesHidden"); 
    } 

    setContentView(R.layout.main); 
} 

और दो विषयों के बीच टॉगल करने के लिए कोड:

if (mThemeId == R.style.AppTheme.Dark) { 
    mThemeId = R.style.AppTheme.Light; 
} else { 
    mThemeId = R.style.AppTheme.Dark; 
} 
this.recreate(); 

नोट: विषय को आपकी कॉल से पहले setContentView()

+0

क्यों आप अपने विषयों को परिभाषित करेंगे, न केवल 'android.R.style.DesiredThemeIdHere' का उपयोग करें? –

+0

@AndreyVoitenkov: यह आवश्यक नहीं है। मैं केवल कस्टम थीम का उपयोग करने और रन-टाइम पर उन्हें बदलने की संभावना डाल रहा हूं। क्षमा करें अगर वह अनावश्यक था। – SSL

संबंधित मुद्दे