Как правильно оформить тему и определить, какие атрибуты неправильны? - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю в поддержке Dark / Night Mode для моего приложения, поэтому я изменил свою активность на AppCompatActivity и android: theme на чистую настраиваемую тему, расширяющую «Theme.AppCompat.DayNight», но тут и там нашел много изменений.

Я не знаю, как правильно их исправить, а затем поддерживать темный режим.

  1. как узнать, например, какие атрибуты влияют, цвет панели навигации, цвет значка навигации, цвет значка вверх / назад на панели действий, цвет фона панели действий и цвет фона активности?(в настоящее время я просто пробую & ошибаюсь все атрибуты, определенные в «android» и «appcompat»)

  2. действие, над которым я работаю, это действие настройки, иначе, PreferenceFragment в AppCompatActivity,и каждый элемент предпочтений надувается из пользовательского макета со следующим ImageView для значка:

    <ImageView
      android:id="@android:id/icon"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_horizontal|top"
      android:layout_marginTop="16dip"
      android:layout_marginStart="@dimen/settings_entry_left_margin"/>
    

Как вы можете видеть, я не установил на нем никакого оттенка, но цвет значка по-прежнемуизменилось.Как мне выяснить причину (и исправить ее)?

PS.Этот вопрос больше о том, «как правильно подходить к теме деятельности»?«Как узнать, какие атрибуты могут быть тематическими?»

Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Вы должны определить темы в файле стилей в папке res.Ниже приведен код для стилизации тем

<resources>

<style name="AppThemeLight" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="titleColor">@color/colorPrimary</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccentLight</item>
    <item name="secondBackground">#c2c2c2</item>
    <item name="roundButton">@drawable/round_button_light</item>
    <item name="alertDialogTheme">@style/AppThemeDialogLight</item>
    <item name="android:itemBackground">#ffffff</item>
    <item name="android:textColor">#000000</item>

</style>

<style name="AppThemeDialogLight" parent="@style/Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorAccentLight</item>
</style>

<style name="AppThemeLight.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:itemBackground">#ffffff</item>
    <item name="android:textColor">#000000</item>
</style>

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

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

<style name="AppThemeDark" parent="Theme.AppCompat">
    <item name="titleColor">@android:color/primary_text_dark</item>
    <item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
    <item name="colorPrimary">@color/primary_material_dark</item>
    <item name="colorAccent">@color/colorAccentDark</item>
    <item name="secondBackground">#151515</item>
    <item name="roundButton">@drawable/round_button_dark</item>
    <item name="alertDialogTheme">@style/AppThemeDialogDark</item>
    <item name="android:itemBackground">@color/item_theme_dark</item>
    <item name="android:textColor">#ffffff</item>
</style>

<style name="AppThemeDialogDark" parent="@style/Theme.AppCompat.Dialog.Alert">
    <item name="colorAccent">@color/colorAccentDark</item>
</style>

<style name="AppThemeDark.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:itemBackground">@color/item_theme_dark</item>
    <item name="android:textColor">#ffffff</item>
</style>

color.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#00897B</color>
    <color name="white">#fff</color>
    <color name="colorA">#D81B60</color>
    <color name="secondBackground">#33333333</color>
    <color name="colorAccentLight">#FF4081</color>
    <color name="colorAccentDark">#a4a4a4</color>
    <color name="dark_blue">#0d47a1</color>
    <color name="light_theme_dark_contextual_bar_background">@color/dark_blue</color>
    <color name="dark_theme_elapsed_time_paused_color">#4cffffff</color>
    <color name="tooltip_background_dark">#e6616161</color>
    <color name="tooltip_background_light">#e6ffffff</color>
    <color name="dark_theme_color_primary_dark">#040404</color>
    <color name="tab_background_selected_theme_dark">#232323</color>
    <color name="tab_background_unselected_theme_dark">#232323</color>
    <color name="item_theme_dark">#363636</color>
</resources>

Внутри onCreateMethod вашей деятельности установите тему как

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setAppTheme(getTheme(this, R.style.AppThemeLight_NoActionBar, R.style.AppThemeDark_NoActionBar));
    setContentView(R.layout.activity_main);
}


public static int getTheme(Context context, int light, int dark) {
        final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context);
        String theme = shared.getString(PREFERENCE_THEME, "");  // upon selecting the theme from options just put the related string in the shared prefs. 
        if (theme.equals("Theme_Dark")) {
            return dark;
        } else {
            return light;
        }
    }

И styles.xml v21

<resources>
<style name="AppThemeLight.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="AppThemeDark.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:itemBackground">@color/item_theme_dark</item>
    <item name="android:textColor">#ffffff</item>

</style>

В основном эти две строки внутри стилей темы вносят множество изменений

 <item name="android:itemBackground">#ffffff</item>
    <item name="android:textColor">#000000</item>

Этидве линии сделают фон каждого вида белым, а каждый цвет текста будет изменен на черный

0 голосов
/ 27 ноября 2018

Список боевых атрибутов приложения можно увидеть здесь .В прошлом я пытался сделать что-то подобное, но я не обязательно отменял каждый из них.Я обошел свой экран, глядя на то, что я хотел изменить, и редактировал только это.

...