如何正确地确定活动主题并确定哪些属性是错误的



我正在为我的应用程序支持黑暗/夜晚模式,所以我将活动更改为AppCompatActivityandroid:theme到一个干净的自定义主题扩展"theme.AppCompat.DayNight",但发现这里和那里有很多变化。

我不知道什么是正确的方法来修复它们,然后支持黑暗模式。

  1. 如何找出哪些属性正在影响,例如,导航栏颜色、导航图标颜色、操作栏上的上下图标颜色、动作栏背景颜色和活动背景颜色?(目前,我只是尝试并错误"android"one_answers"appcompat"中定义的所有属性(

  2. 我正在处理的活动是一个设置活动,也就是AppCompatActivity中的PreferenceFragment,每个首选项都是从自定义布局中展开的,图标的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。这个问题更多的是关于"什么是活动主题的‘正确’方式?"如何知道哪些属性可以作为主题?">

谢谢。

这里可以看到应用程序战斗属性的列表。在过去,我试图做一些类似的事情,但我不一定会推翻其中的每一个。我在屏幕上转来转去,看看我想改变什么,然后只编辑它。

您必须在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>

这两行将使每个视图的背景为白色,并且每个文本颜色将更改为黑色

相关内容

  • 没有找到相关文章

最新更新