2015-10-18 55 views
0

因此,在我的应用程序中,我创建了一种让用户将主题设置为深色或浅色的方法。我将它实现到每个活动中,但是现在如果主题很暗,活动就有两个动作栏。如果我将它作为灯光主题,则只显示一个操作栏。这对我来说没有任何意义。所有的帮助非常感谢。谢谢。更改主题会导致双重操作栏故障

这里是活动的PIC:

2 action bars

下面是在MainActivity的代码:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     settings = getSharedPreferences(PREFS_NAME, 0); 
     checkDark(settings.getBoolean("darkMode", false)); 
     super.onCreate(savedInstanceState); 
     managerHelper = new ManagerDatabaseAdapter(this); 
     setContentView(R.layout.activity_main); 
     adapter = new RVAdapter(this, getData()); 
     RV = (RecyclerView) findViewById(R.id.mainV); 
     layoutManager = new LinearLayoutManager(this); 
     RV.setLayoutManager(layoutManager); 
     RV.setAdapter(adapter); 
     adapter.setClickListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     // getMenuInflater().inflate(R.menu.menu_main, li) 
     return true; 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && exitD) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setTitle("Confirm exit") 
        .setPositiveButton("EXIT", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          finish(); 
         } 
        }) 
        .setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }).show(); 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     switch (id) { 
      case R.id.action_settings: 
       Intent intent = new Intent(this, SettingsActivity.class); 
       intent.putExtra(EXTRA_MESSAGE, true); 
       startActivity(intent); 
       overridePendingTransition(R.anim.abc_popup_enter, R.anim.abc_fade_out); 
       return true; 
      case R.id.action_surveyList: 
       Intent survey = new Intent(this, GetSurvey.class); 
       survey.putExtra(EXTRA_MESSAGE, true); 
       startActivity(survey); 
       overridePendingTransition(R.anim.abc_popup_enter, R.anim.abc_fade_out); 
       return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    private void checkDark(boolean isChecked) { 
     if (isChecked) 
      setTheme(R.style.Dark); 
     else 
      setTheme(R.style.AppTheme); 
    } 
} 

这里是styles.xml:

<resources>> 

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">#E53935</item> 
     <item name="colorPrimaryDark">#C62828</item> 
     <item name="android:navigationBarColor">#E53935</item> 
     <item name="android:colorAccent">#1565C0</item> 
     <item name="android:colorForeground">@color/foreground_material_light</item> 
     <item name="android:colorBackground">@color/background_material_light</item> 
     <!-- Other attributes --> 
    </style> 

    <style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:navigationBarColor">#E53935</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@color/primary_dark_material_light</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    </style> 

    <style name="Dark" parent="@android:style/Theme.Material" > 
     <item name="android:colorForeground">@color/foreground_material_dark</item> 
     <item name="android:colorPrimary">@color/primary_material_dark</item> 
     <item name="android:colorPrimaryDark">@color/primary_dark_material_dark</item> 
     <item name="android:colorAccent">@color/accent_material_dark</item> 
     <item name="android:navigationBarColor">@color/primary_material_dark</item> 
    </style> 

    <style name="AppTheme.NoActionBar.Dark" parent="@style/AppTheme.NoActionBar" > 
     <item name="colorPrimary">#E53935</item> 
     <item name="colorPrimaryDark">#C62828</item> 
     <item name="android:navigationBarColor">#E53935</item> 
     <item name="android:colorAccent">#1565C0</item> 
     <item name="android:colorBackground">@color/background_material_dark</item> 
     <item name="android:textColorPrimary">@android:color/primary_text_dark</item> 
     <item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item> 
     <item name="android:textColorSecondary">@android:color/secondary_text_dark</item> 
     <item name="android:textColorSecondaryInverse">@android:color/secondary_text_light</item> 
     <item name="android:statusBarColor">@color/primary_dark_material_dark</item> 
    </style> 

</resources> 

回答

1

不知道这是否是问题的原因,而只是需要注意。您的AppTheme的父母来自AppCompat,但您的黑暗主题是使用内置的材质主题。

+0

是的,这确实起作用。做出了父应用程序的主题,一切都很好。 –

1

更改父样式Theme.Material.NoActionBar

您的自定义样式:

<style name="Dark" parent="@android:style/Theme.Material.NoActionBar" > 
... 
</style> 
+0

这会工作,但我继续前进,并让父母的应用程序主题,只是从那里改变的元素。虽然我很欣赏答案! –