Android 主题不切换
我试图在主题之间切换。我查看了HoneyCombGallery示例代码,找到了在主题之间切换的代码。但它在我的应用程序中不起作用 代码: MainActivity.javaAndroid 主题不切换,android,android-theme,android-menu,Android,Android Theme,Android Menu,我试图在主题之间切换。我查看了HoneyCombGallery示例代码,找到了在主题之间切换的代码。但它在我的应用程序中不起作用 代码: MainActivity.java public class MainActivity extends Activity { boolean success = true; private int mThemeId = -1; Button btnViewLib; Button btnlog; @Override protected void o
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>
@颜色/操作栏\背景\灯光
@颜色/操作栏\背景\深色
@style/ActionBar.Light
真的
@android:颜色/背景光
@可绘图/集成电路菜单照相机全息灯
@可绘制/集成电路菜单切换全息灯
@可绘图/集成电路菜单共享全息灯
@style/ActionBar.深色
真的
@安卓:颜色/背景颜色为深色
@可绘图/集成电路菜单照相机全息图黑暗
@可绘制/集成电路菜单切换全息图暗
@可绘制/集成电路菜单共享全息图黑暗
主题应在super.onCreate(savedInstanceState)之前设置代码>呼叫
编辑:
如果您想从savedInstanceState
获取某些内容,您应该首先在其中保存一些内容。因此,您需要覆盖onSaveInstanceState:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("theme", mThemeId );
}
仍然不起作用。在HoneycombGallery示例项目中,它仅以这种方式完成。您是否有任何错误?或者它就是不起作用?您可以尝试setTheme(R.styles.AppTheme.Light)
而不是这个if语句,看看它是否有效;查看“if-else”语句是否正确执行。每次我从菜单中选择时,似乎只执行else。知道原因是什么吗?您正试图在OnCreate()
方法中从savedInstanceState获取主题,但没有将其保存在那里。你应该重写onSaveInstanceState()
方法并保存你的mThemeId
。在android清单中,如果我只从黑暗主题开始,它可以工作,但仍然不能切换。所以它清楚地表明,黑暗主题正在工作,但没有切换,这意味着“如果其他”有问题。