2016-03-18 4 views
1

Я пытаюсь создать light и темные темы для моего приложения. При применении легкой темы панель состояния оранжевая, как и должно быть, но как только я переключитесь на темную темуstatusbar остается оранжевым, хотя Я хочу, чтобы он был черным.Темная тема не применяется правильно, цвет статусной панели не изменяется

Я не профессионал в теме, поэтому любая помощь действительно ценится.

Я включил некоторые скриншоты, чтобы вы могли видеть, что я имею в виду.

Благодарим вас заблаговременно.

Edit:

Я нашел решение сам (если кто-то есть такая же проблема), в начале моего Loginactivity я проверить, какая тема применяется через файл SharedPrefs.

// which theme is set. 
     SharedPreferences settings = getSharedPreferences(Helper.PREF_NAME, MODE_PRIVATE); 
     Helper.newTheme = settings.getInt("themeCustom", 0); 

Если черная тема установлена, то я просто модифицировать STATUSBAR себя с WindowManager:

if (Helper.newTheme == Helper.THEME_DARK) { 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       Window window = getWindow(); 
       window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
       window.setStatusBarColor(Color.parseColor("#1B1C1C")); 
      } 

      this.setTheme(R.style.DarkTheme); 
    === 
} 

Дело закрыто ..

Light Theme

Dark Theme

Styles.xml:

<resources> 
    <!-- reference to CardView White/Dark styles --> 
    <attr name="cardStyle" format="reference" /> 
    <attr name="txtBgStyle" format="reference" /> 

    <!-- Light application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
     <!-- your app branding color for the app bar --> 
     <item name="colorPrimary">#FD8300</item> 
     <!-- darker variant for the status bar and contextual app bars --> 
     <item name="colorPrimaryDark">#F59F00</item> 
     <!-- theme UI controls like checkboxes and text fields --> 
     <item name="colorAccent">#FF4081</item> 
     <item name="android:windowDisablePreview">true</item> 
     <!-- v7.widget.CardView background color --> 
     <item name="cardStyle">@style/CardView.Light</item> 
     <item name="txtBgStyle">@style/CardView.Light</item> 
    </style> 

    <!-- Dark application theme. --> 
    <style name="DarkTheme" parent="Theme.AppCompat"> 
     <!-- your app branding color for the app bar --> 
     <item name="colorPrimary">#FD8300</item> 
     <!-- darker variant for the status bar and contextual app bars --> 
     <item name="colorPrimaryDark">#1B1C1C</item> 
     <!-- theme UI controls like checkboxes and text fields --> 
     <item name="colorAccent">#FAFAFA</item> 
     <!-- v7.widget.CardView background color --> 
     <item name="cardStyle">@style/cardStyle</item> 
     <item name="txtBgStyle">@style/txtBgStyle</item> 
    </style> 

    <!-- v7.widget.CardView dark style --> 
    <style name="cardStyle"> 
     <!-- Card background color --> 
     <item name="cardBackgroundColor">#282929</item> 
    </style> 

    <!-- Custom dark style for textviews, layouts, etc --> 
    <style name="txtBgStyle"> 
     <item name="android:background">#282929</item> 
    </style> 

    <style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
    </style> 

    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /> 

    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /> 
</resources> 

Стили v21:

<resources>> 

    <style name="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/transparent</item> 
    </style> 
</resources> 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="myapp.example.com.myapp"> 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".LoginActivity" 
      android:noHistory="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:noHistory="false" 
      android:label="@string/title_activity_login"/> 
    </application> 
</manifest> 
+0

вы должны переопределить темы в styles.xml, и изменить цвет панели инструментов в этом. –

+0

@NarendraBaratam Я понятия не имел, как это сделать. Не могли бы вы привести пример моего кода? – Simon

ответ

0

пойти к вашему стилю

добавить эти коды в вашей теме в стиле

<item name="colorPrimary">#000000</item> 
    <item name="colorPrimaryDark">#000000</item> 
+0

Привет, это также изменяет панель инструментов на черный, она должна оставаться оранжевой, когда применяется легкая тема. Я хочу, чтобы «панель состояния» была черной, и при применении «темной темы» панель инструментов должна оставаться оранжевой в светлой и темной теме. Pls взгляните на мой style.xml – Simon

+0

В этом случае перейдите в свой XML-файл макета и добавьте этот код. Android: background = "# 000000" – snehasish

+0

Я обновил свой снимок экрана для темной темы, так что вы знаете, что я имею в виду. Было бы здорово, если бы вы могли помочь, может быть, это тоже что-то в AndroidManifest.xml, что я написал? Не знаю. – Simon

0

в вашем родительском макете добавить этот код

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="#000000"//this is the main code use this line in your code 
    ></LinearLayout> 
+0

Привет, THX, но это не так, как должно работать. Должно быть, когда я применяю свою легкую тему, строка состояния должна быть оранжевой, wgen. Я применяю свою темную панель статуи темной черты. – Simon

0

набор colorPrimaryDark правильно в styles.xml ценностного-v21, как показано ниже -

<style name="AppTheme" parent="Theme.AppCompat.YourTheme"> 

     <item name="android:colorPrimary">@color/PrimaryColor</item> 
     <item name="android:colorPrimaryDark">@color/PrimaryBackgroundDark</item> 

    </style> 

Чтобы изменить статус бар цвет вы должны изменить - colorPrimaryDark

для приложения бара вы должны изменить - colorPrimary

0

просто редактировать этот <item name="colorPrimaryDark">#000000</item>

Тема.AppCompat по умолчанию вызывает цветной цветной символ «colorPrimaryDark». Просто измените это на любое значение.

«colorPrimary» значение изменяется ваша панель цвета

надежду, что решает проблему

0

Этот код изменит тем, как вы должны сделать want.You как colorprimary и colorprimaryDark переопределение и редактировать в вашем styles.xml файл.

Update

Проблема с вашим родительским темой в LightTheme, родитель должен быть Theme.AppCompat.Light.DarkActionBar

LightTheme: colorprimary = оранжевый, colorprimaryDark = DarkOrange.

DarkTheme: colorprimary = orange, colorprimaryDark = Черный.

проверка ниже код:

<!-- Light application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- your app branding color for the app bar --> 
    <item name="colorPrimary">#FD8300</item> 
    <!-- darker variant for the status bar and contextual app bars --> 
    <item name="colorPrimaryDark">#F59F00</item> 
    <!-- theme UI controls like checkboxes and text fields --> 
    <item name="colorAccent">#FF4081</item> 
    <item name="android:windowDisablePreview">true</item> 
    <!-- v7.widget.CardView background color --> 
    <item name="cardStyle">@style/CardView.Light</item> 
    <item name="txtBgStyle">@style/CardView.Light</item> 
</style> 

<!-- Dark application theme. --> 
<style name="DarkTheme" parent="Theme.AppCompat"> 
    <!-- your app branding color for the app bar --> 
    <item name="colorPrimary">#FD8300</item> 
    <!-- darker variant for the status bar and contextual app bars --> 
    <item name="colorPrimaryDark">#1B1C1C</item> 
    <!-- theme UI controls like checkboxes and text fields --> 
    <item name="colorAccent">#FAFAFA</item> 
    <!-- v7.widget.CardView background color --> 
    <item name="cardStyle">@style/cardStyle</item> 
    <item name="txtBgStyle">@style/txtBgStyle</item> 
</style> 
<style> 

Please See the image for more clarity

+0

Вы пробовали этот код @simon –

+0

Привет, да, но # 1B1C1C в легкой теме меняет статусную панель на темную, она должна оставаться оранжевой, когда применяется легкая тема. Строка состояния должна быть черной, если применяется темная тема. Смотрите мой второй скриншот. Это что-то в моем манифесте? Независимо от того, что я пытаюсь, панель состояния остается оранжевой при применении темной темы. – Simon

+0

сейчас, я меняю код @ simon –

Смежные вопросы