【问题标题】:Android Change Theme Inside AppAndroid 在 App 内更改主题
【发布时间】:2017-06-21 18:05:16
【问题描述】:

如何在 android 应用程序中更改主题?我有设置活动,我可以选择浅色或深色主题。

设置活动 我可以使用这样的东西吗:

public class OTGEnabler extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener
{
@Override
protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_otgenabler);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
        String theme = sharedPrefs.getString("Choose Theme",null);
        if(theme != null && theme.equals("Light"))
        {
            setTheme(R.style.AppTheme);
        }
        else
        {
            setTheme(R.style.AppTheme_AppBarOverlay);
        }
    }
}

这是错误日志:

02-04 07:16:40.023 23924-23924/com.example.pavle.usbotgenabler E/AndroidRuntime: 致命异常: main 进程:com.example.pavle.usbotgenabler,PID:23924 java.lang.RuntimeException:无法启动活动 组件信息{com.example.pavle.usbotgenabler/com.example.pavle.usbotgenabler.otg_enaber.OTGEnabler}: java.lang.IllegalStateException:这个活动已经有一个动作 酒吧提供的窗户装饰。不要要求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 您的主题改为使用工具栏。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 引起:java.lang.IllegalStateException:这个Activity已经有 窗口装饰提供的操作栏。不要要求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 您的主题改为使用工具栏。 在 android.support.v7.app.AppCompatDelegateImplV9.setSupportActionBar(AppCompatDelegateImplV9.java:203) 在 android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:133) 在 com.example.pavle.usbotgenabler.otg_enaber.OTGEnabler.onCreate(OTGEnabler.java:80) 在 android.app.Activity.performCreate(Activity.java:6237) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • 我尝试再次运行应用程序并启动,但是当我从列表首选项菜单中选择亮或暗时没有任何反应!!!

标签: android android-theme


【解决方案1】:

您可以在onCreate 中使用setTheme(..) 之前 调用setContentView(...)super.oncreate(),它应该可以工作,而不是在他们之后!


额外帮助

在视图中添加编辑文本

主题一

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorAccent">@color/colorAccent</item>
</style>

主题二

<style name="AppThemeTwo" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorAccent">@color/blue</item>
</style>

如果你添加这两个,你会注意到你的 EditText 有区别,比如光标颜色光标指针颜色等。

【讨论】:

    【解决方案2】:

    androidManifest.xml 文件中,将设置活动的主题更改为设置活动所需的新主题。

    这个新主题必须在values->style.xml

    中定义

    如果不存在,则添加到 androidManifest.xml 文件中 xml 标记后的设置活动 android:主题

    【讨论】:

    • 我添加了主题,但是当我从导航抽屉中选择设置时,我得到错误应用程序已停止工作!!!
    • 你为什么要日志猫?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2016-06-08
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多