小编Swi*_*czu的帖子

安卓。在 Light Theme 中使用深色主题颜色

我正在使用 Theme.Material.Components.DayNight 主题在我的应用程序中实现暗模式。问题是我的暗模式将纯粹与暗成分混合,而我的“亮”模式将与混合的暗和亮成分混合。因此,当应用程序默认模式设置为 Light 时,我需要以某种方式访问​​深色主题属性。你能帮我解决我的问题吗?

我正在考虑设置自定义主题“DarkThemeInLight”并将其分配给应该是黑暗的视图,但这是一个好方法吗?如果我直接在该主题定义中设置颜色,我将重复 color.xml(night) 中几乎一半的代码。

我正在考虑的方法:

     <style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorSecondary">@color/colorSecondary</item>
        <item name="android:colorBackground">@color/colorBackground</item>
        <item name="colorSurface">@color/colorSurface</item>
        <item name="colorError">@color/colorOnError</item>
        <item name="colorOnPrimary">@color/colorOnPrimary</item>
        <item name="colorOnSecondary">@color/colorOnSecondary</item>
        <item name="colorOnBackground">@color/colorOnBackground</item>
        <item name="colorOnSurface">@color/colorOnSurface</item>
        <item name="colorOnError">@color/colorOnError</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="drawerArrowStyle">@style/DrawerIcon</item>
        <item name="textAppearanceSubtitle1">@style/TextAppearance.MyTheme.Subtitle1</item>
        <item name="textAppearanceSubtitle2">@style/TextAppearance.MyTheme.Subtitle2</item>
        <item name="textAppearanceCaption">@style/TextAppearance.MyTheme.Caption</item>
        <item name="android:colorControlActivated">@color/colorPrimary</item>
    </style>

    <style name="DarkThemeInLight" parent="AppTheme">
        <item name="android:colorBackground">@night/colorsBackground</item> (Can i call night folder somehow?)
        or
        <item name="android:colorBackground">#121212</item> (Value from night colors folder)
        ...
    </style>
Run Code Online (Sandbox Code Playgroud)

2020 年 6 月 4 日更新:

最终,我能够达到我提到的效果。由于两个独立的 AppTheme 和 AppTheme.Dark 样式的定义,我能够将某些组件样式化为浅色,而将其他组件样式化为深色,但我的解决方案排除了在浅色和深色模式之间切换的可能性,因此我的问题仍然存在

    <style …
Run Code Online (Sandbox Code Playgroud)

android themes styles material-design android-darkmode

5
推荐指数
1
解决办法
2669
查看次数

如何拉伸协调器布局内的内容以填充空白空间?

我正在尝试实现如下所示的行为(在图片上),因此我需要拉伸 AppBarLayout 下面的所有内容。我已经通过实现自定义 CoordinatorLayout 行为以某种方式实现了这一目标,但该解决方案在 RecyclerView 内的视图回收和整体性能方面存在一些问题。有没有更简单的解决方案来实现我想要的?

在此输入图像描述

public class TestBehaviour48Margin extends CoordinatorLayout.Behavior {

    public TestBehaviour48Margin() {
    }

    public TestBehaviour48Margin(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {
        return dependency instanceof AppBarLayout;
    }

    @Override
    public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull View child, @NonNull View dependency) {
        AppBarLayout appBarLayout = (AppBarLayout) dependency;
        val toolbar = appBarLayout.findViewById(R.id.toolbar);
        int range = appBarLayout.getTotalScrollRange();
        int totalHeight = parent.getHeight();
        int appBarHeight = appBarLayout.getHeight();
        int toolbarHeight …
Run Code Online (Sandbox Code Playgroud)

android android-coordinatorlayout android-appbarlayout

5
推荐指数
0
解决办法
453
查看次数