Material 组件主题的描述?

Description of Material Components themes?

我目前正在开始使用 Material 组件主题。 Getting Started 指南提到了这些主题:

Theme.MaterialComponents
Theme.MaterialComponents.NoActionBar
Theme.MaterialComponents.Light
Theme.MaterialComponents.Light.NoActionBar
Theme.MaterialComponents.Light.DarkActionBar
Theme.MaterialComponents.DayNight
Theme.MaterialComponents.DayNight.NoActionBar
Theme.MaterialComponents.DayNight.DarkActionBar

虽然没有对它们的描述。我在哪里可以找到有关这些主题的更多详细信息,或者任何人都可以在答案中解释它们吗?举个例子:

  1. [..].NoActionBar是什么意思?如果我不想要操作栏,我不会将它包含在我的布局文件中,所以我真的不明白。
  2. 我什么时候只使用 Theme.MaterialComponents?还是我会一直使用 Theme.MaterialComponents.LightTheme.MaterialComponents.DayNight
  3. 这些主题是什么样子的?我找不到任何预览,也不想自己全部试用 - 可能需要一些时间才能使用 Android.
  4. 上可用的所有小部件
  5. 这些主题定义了什么?只有颜色?文字风格?字体系列?

我敢肯定,我无法详尽地回答您的所有问题,但我会分享一些想法,也许会让您更进一步:

What means [..].NoActionBar?

如果您不希望运行时将 ActionBar 添加到 Activity,您应该使用以“.NoActionBar”结尾的主题,可能是因为您使用了 Toolbar .例如,如果您选择 Theme.MaterialComponents.Light 并使用 Toolbar,您会注意到现在您的应用程序将呈现两个 ActionBars

请注意,如果某个主题名为 "MyTheme",那么以 "MyTheme." 为前缀的主题将继承 "MyTheme" 的所有内容。所以 Theme.MaterialComponents.Light.NoActionBar 几乎与 Theme.MaterialComponents.Light 相同,除了 ActionBar.

所以如果你真的不想要任何 ActionBar 你应该选择 .NoActionBar 版本 不包括代理(Toolbar ) 在你的布局文件中。

What do these themes define? Only colors? Text style? Font family?

他们这样做,但他们也定义了大小、边距和行为。除此之外,其中一些对某些小部件具有特殊样式的组合(例如 style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"TextInputLayout

要深入了解主题可以影响哪些属性,您可以查看 themes_material.xml

的来源

When would I use only Theme.MaterialComponents? Or would I always use Theme.MaterialComponents.Light or Theme.MaterialComponents.DayNight?

由于 Theme.MaterialComponentsTheme.MaterialComponents.Light 的父主题,因此它们有很多共同点。主要区别在于,第一个假定您的应用将具有深色背景(因此文本应为白色),而第二个将具有黑色文本并假定您的应用的背景为浅色。

通常,人们会尝试使用某个主题作为模板,然后可以/必须对其进行自定义 - 例如使用特殊的强调色。

How do these themes look like?

您可以通过在您自己的小型示例应用程序中从一个切换到另一个来了解总体思路。

确实没有单一的信息来源(也就是 android 主题圣经)。您已经发现 material.io, but maybe the Styles and Themes section from developer.android.com or this blog post on DayNight — Adding a dark theme to your app 会提供更多信息。