应用程序内的Android更改主题

问题描述 投票:1回答:2

如何更改Android应用程序内的主题?我有设置活动,我可以选择Light或Dark主题。

设置活动enter image description here我可以使用这样的东西:

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:FATAL EXCEPTION:main进程:com.example.pavle.usbotgenabler,PID:23924 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.pavle.usbotgenabler / com.example.pavle.usbotgenabler.otg_enaber.OTGEnabler}:java.lang.IllegalStateException:此Activity已经有一个由窗口装饰提供的操作栏。不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏。在Android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416),android.app.A活动,活动(传统技术) $ H.handleMessage(ActivityThread.java:1344)位于android.app.AtoT.Thread.main的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148) ActivityThread.java:5417)位于com.android.internal.os的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)的java.lang.reflect.Method.invoke(Native Method)。 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)at com.example.pavle.usbotgenabler.otg_enaber.OTGEnabler .onCreate(OTGEnabler.java:80)位于android.app.A.T.A活动中的android.app.Asetrumentation.callActivityOnCreate(Instrumentation.java:1107)上的android.app.Activity.performCreate(Activity.java:6237)。(ActivityThread:。 java:2369)在Android.app.A活动中的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)android.app.ActivityThread $ 6.handleMessage(ActivityThread.java:1344)的android.app.ActivityThread.-wrap11(ActivityThread.java)在Android.os.Handler.dispatchMessage(Handler.java:102)的android.app.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java:5417)的java.lang上。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteIni)中的reflect.Method.invoke(Native Method) t.java:726)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

android android-theme
2个回答
0
投票

你可以在调用setTheme(..)and onCreate之前在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不同,如光标颜色光标指针颜色等。


0
投票

在androidManifest.xml文件中,将设置活动的主题更改为您想要进行设置活动的新主题。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.