如何在android应用程序中设置昼夜主题

如何在android应用程序中设置昼夜主题,android,Android,我已经创建了一个Android应用程序,它使用一系列首选项来设置昼夜模式主题 My styles.xml #费埃亚 @可绘图/ic_图标_设置 有人知道我如何在styles.xml中应用night和day模式吗?你应该看看Android 3.2 API13示例应用程序中的HoneycombGallery示例 他们的实施方式是: 在style.xml中声明两个主题: <style name="ActionBar" parent="@android:style/Widget.Holo

我已经创建了一个Android应用程序,它使用一系列首选项来设置昼夜模式主题

My styles.xml


#费埃亚
@可绘图/ic_图标_设置

有人知道我如何在styles.xml中应用night和day模式吗?你应该看看Android 3.2 API13示例应用程序中的HoneycombGallery示例

他们的实施方式是:

style.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>
以及
MainActivity
类,在该类中可以在白天和夜间模式之间切换:

注意:我已经去掉了这个问题上下文中不需要的其他内容

@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);
    }
}
在模式之间切换所需的全局变量:

private int mThemeId = -1;
在onCreate()中保存最后选择的模式:


但一定要从SDK管理器下载示例并查看实际(整个)功能。

Activity.recreate()
仅在API 11(Android 3.0)中提供未找到给定名称***@android的资源:颜色/背景\灯光@drawable/ic\菜单\摄像头\全息灯@drawable/ic\菜单\切换\全息灯@drawable/ic\菜单\共享\全息灯***处于style@NiravMehta:您的
可绘制文件夹/r中是否有这些图像?如果你不这样做,这个错误是很明显的。正如本文开头提到的,这是一个来自Android3.2API13示例应用程序的示例。您可以从“蜂巢画廊”示例中复制它们。或者使用其他图像并更改
style.xml
中的名称。
@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);
    }
}
private int mThemeId = -1;
if(savedInstanceState != null && savedInstanceState.getInt("theme", -1) != -1) {
    mThemeId = savedInstanceState.getInt("theme");
    this.setTheme(mThemeId);
}