Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 主题不切换_Android_Android Theme_Android Menu - Fatal编程技术网

Android 主题不切换

Android 主题不切换,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

我试图在主题之间切换。我查看了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>

@颜色/操作栏\背景\灯光
@颜色/操作栏\背景\深色
@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清单中,如果我只从黑暗主题开始,它可以工作,但仍然不能切换。所以它清楚地表明,黑暗主题正在工作,但没有切换,这意味着“如果其他”有问题。