2015-10-18 79 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

這會工作,但我繼續前進,並讓父母的應用程序主題,只是從那裏改變的元素。雖然我很欣賞答案! –