2017-02-04 2 views
1

Как изменить тему внутри приложения для Android? У меня есть активность с настройками, где я могу выбрать тему «Свет» или «Темная».Android Change Theme Inside App

Настройки активности 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/ком. 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: Эта деятельность уже имеет действие бар поставляемый декором окна. Не запрашивайте 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.Metho d.invoke (родной метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616) Caused by: java.lang.IllegalStateException: Эта активность уже имеет панель действий, предоставляемую декором окна. Не запрашивайте 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) at 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. вызова (Native Method) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

+0

Что происходит с вашим кодом? – Raghunandan

+0

Когда я запустил приложение, приложение перестало работать !!! – pavlenis1906

+0

, тогда его авария отправляет соответствующие журналы – Raghunandan

ответ

0

вы можете используйте setTheme(..) внутри 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

@ pavlenis1906 Если у вас есть другой вопрос, пожалуйста, спросите его, нажав кнопку [Ask Question] (// stackoverflow.com/questions/ask). Пожалуйста, воздержитесь от беспечных ответчиков. –

0

androidManifest.xml изменить тему темы настроек для новой темы, которую вы хотите для настроек activit у.

эта новая тема должна быть определена в с ценностно> style.xml

Если нет добавить к активности настроек в AndroidManifest.xml файл имеет следующий XML-тег андроид: Тема

+0

Я добавил тему, но когда я выбираю настройки из навигационного ящика, я получаю сообщение об ошибке, перестало работать !!! pavlenis1906

+0

вы можете поделиться сообщением об ошибке с выходом журнала cat. – vicky

+0

Почему вы хотите ловить кошку? – pavlenis1906