2013-03-13 104 views
0

我想切換主題。我查看了HoneyCombGallery示例代碼,並找出了在主題之間切換的代碼。但它不適用於我的應用程序。主題不切換

代碼:

MainActivity.java

public class MainActivity extends Activity { 

boolean success = true; 
    private int mThemeId = -1; 
Button btnViewLib; 
Button btnlog; 


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

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


    setContentView(R.layout.activity_main); 

    btnViewLib = (Button) findViewById(R.id.btnlib); 
    btnlog = (Button) findViewById(R.id.btnlog); 


    btnViewLib.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // Launching All products Activity 
      Intent i = new Intent(getApplicationContext(), LibActivity.class); 
      startActivity(i); 

     } 
    }); 

    btnlog.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // Launching All products Activity 
      Intent i = new Intent(getApplicationContext(), SomeActivity.class); 
      startActivity(i); 

     } 
    }); 

} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 

    case R.id.toggleTheme: 
     if (mThemeId == R.style.AppTheme_Dark) { 
      mThemeId = R.style.AppTheme_Light; 
     } else { 
      mThemeId = R.style.AppTheme_Dark; 
     } 
     this.recreate(); 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 
} 

main.xml中

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

<item 
    android:id="@+id/action_settings" 
    android:orderInCategory="100" 
    android:showAsAction="never" 
    android:title="@string/action_settings"/> 

    <!-- Example of items in the overflow menu --> 
    <item android:id="@+id/toggleTheme" 
    android:title="@string/theme_toggle" 
    android:showAsAction="never" /> 

</menu> 

Styles.xml

<resources> 
<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> 
</resources> 

回答

1

主題前應super.onCreate(savedInstanceState);呼叫進行設置。

編輯:

如果你想從savedInstanceState得到的東西,你應該先保存東西在裏面。所以你需要覆蓋onSaveInstanceState:

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

    savedInstanceState.putInt("theme", mThemeId); 

} 
+0

仍然無法正常工作。在HoneyCombGallrey示例項目中,僅以這種方式完成。 – Bhavyanshu 2013-03-13 12:23:42

+0

你有什麼錯誤嗎?或者它只是不工作?你可以嘗試'setTheme(R.styles.AppTheme.Light)'而不是這個if語句,看看它是否可以工作。 – 2013-03-13 12:32:30

+0

我用Log.i(「Theme」,「Dark Selected」);看看「if else」語句是否正確執行。似乎只有其他人每次從菜單中選擇執行。任何想法可能是什麼原因? – Bhavyanshu 2013-03-13 12:36:08