如何在 Android 中自动显示浅色主题和深色主题的不同资源?

发布于 2024-10-05 12:36:04 字数 321 浏览 5 评论 0原文

据我了解,Android 有两个内置主题,浅色和深色。我希望我的应用程序根据用户使用的主题显示不同的资源(而不是让用户在我的应用程序中显式指定主题!)。这可能吗?如果是这样,是否可以通过 xml 资源来完成,或者是否需要编程方法?

注意:是的,我已阅读 http://d.android.com/guide /topics/ui/themes.html 至少三次。它似乎告诉我如何做就是为我的元素设置一个特定的主题或样式,而不是正确显示浅色/深色元素。

As I understand, there are two built in themes for Android, Light and Dark. I want my application to display different resources based on which theme the user is using (NOT by having the user explicitly specify a theme in my app!). Is this possible? If so, is it possible to do via xml resources, or is a programmatic approach required?

Note: Yes, I've read http://d.android.com/guide/topics/ui/themes.html at least thrice. It seems like all it tells me how to do is set one specific theme or styles to my element, rather than displaying light/dark elements correctly.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长梦不多时 2024-10-12 12:36:04

是的,可以通过 XML 资源来完成。

来自 https://developer.android.com/preview/features/darktheme#themes_and_styles:

您的主题和样式应避免在浅色主题下使用硬编码的颜色或图标。您应该使用主题属性(首选)或夜间限定资源。

所以是的,有资源限定符,请参阅 https:/ /developer.android.com/guide/topics/resources/providing-resources.html#NightQualifier
: nightnotnight 后缀。

我发现 Material theme website 非常擅长解释这一点,但最重要的部分是:

或者,如果您想为您的应用定义单独的 LightDark 主题,您可以从 Theme.MaterialComponents.Light 继承values 目录,以及 values-night 目录中的 Theme.MaterialComponents。例如:

res/values/themes.xml

<样式名称=“Theme.MyApp”parent=“Theme.MaterialComponents.Light”>
    

res/values-night/themes.xml

<样式名称=“Theme.MyApp”parent=“Theme.MaterialComponents”>
   

Yes, it can be done via XML resources.

From https://developer.android.com/preview/features/darktheme#themes_and_styles:

Your themes and styles should avoid hard-coded colors or icons intended for use under a light theme. You should use theme attributes (preferred) or night-qualified resources instead.

So yes, there are resource qualifiers for that, see https://developer.android.com/guide/topics/resources/providing-resources.html#NightQualifier
: night and notnight suffixes.

I find Material theme website to be pretty good at explaining this but the most important part is:

Alternatively, if you want to define separate Light and Dark themes for your app, you can inherit from Theme.MaterialComponents.Light in the values directory, and Theme.MaterialComponents in the values-night directory. E.g.:

res/values/themes.xml

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
    <!-- ... -->
</style>

res/values-night/themes.xml

<style name="Theme.MyApp" parent="Theme.MaterialComponents">
   <!-- ... -->
</style>
寒冷纷飞旳雪 2024-10-12 12:36:04

您可以在这个网站上检查替代的可绘制文件夹。

http://developer.android.com/guide/topics/resources/providing -resources.html

此外,此文档可能会有所帮助。
http://developer.android.com/guide/topics/ui/themes.html

对于常规主题:我不知道 Android 中有任何相关功能,您可能需要自己开发。

This is a site you can check for alternative drawable folders.

http://developer.android.com/guide/topics/resources/providing-resources.html

Also, this document might be helpful.
http://developer.android.com/guide/topics/ui/themes.html

For regular themes: I'm not aware of any functions in Android about that, you might need to develop it yourself.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文