我如何根据应用程序主题更改 icon.png (day/night) android kotlin
How can i change icon.png depending on app theme (day/night) android kotlin
我的初始屏幕上有一个徽标和两个文件:
logo_night.png 和 logo_day.png
如何使用这两个文件更改此徽标,该徽标会根据应用程序的主题而变化?
因为你使用的是png格式。您可以在上下文对象上调用 .getTheme() 来获取当前主题,进行 if 语句来决定显示哪个 png。
例如在activity中,你可以通过调用getTheme()
来获取主题,因为this.getTheme() 是隐含的。
另一种可能性是切换到矢量,您可以在其中为不同的主题定义不同的颜色,当用户更改主题时它们会自动更改。这可能是更好、更具可扩展性的解决方案。您可以找到更多详细信息 here.
通常的方法是使用 night
资源限定符,因此如果您使用深色主题,它会从等效的 night
文件夹中提取命名资源(如果存在)。
我认为你有三个基本选项:
两个都叫logo.png
,但是一个版本放在drawable
,另一个放在drawable-night
。这样,每当您引用 @drawable/logo
时,它都会根据主题提取正确的版本。如果你有多个密度版本,在 drawable-hdpi
等中,你将需要它们在 drawable-night-hdpi
等中(限定符顺序很重要)
如果您以通常的方式制作启动画面,即创建带有背景层的启动画面可绘制对象,并将徽标可绘制在另一层上,您可以只制作一个 night
这个的变体(在 drawable-night
中)。每个版本都可以明确引用 logo_day
或 logo_night
,您可以将这些 PNG 保存在正常的 drawable
文件夹中
或者您可以制作一个 night
版本的初始主题,并将背景显式设置为初始可绘制对象的深色版本。您的启动画面都可以保留在正常的 drawable
文件夹中
所以基本上,某些东西必须在符合 night
条件的资源文件夹中获得一个版本,这样它才能为暗模式提供替代资源。这取决于您要制作夜间版本的层次结构中的哪个资源(或者如果需要,您可以为所有资源制作夜间版本)。
另请记住,您的初始主题(如果您这样做的话)遵循系统的暗模式设置。如果您在应用程序中实现切换,并将其设置为深色模式,如果设备设置为浅色模式,则启动画面仍会显示为浅色变体。该主题是在您的应用程序启动之前设置的,并开始计算它应该处于暗模式还是亮模式
我的初始屏幕上有一个徽标和两个文件: logo_night.png 和 logo_day.png
如何使用这两个文件更改此徽标,该徽标会根据应用程序的主题而变化?
因为你使用的是png格式。您可以在上下文对象上调用 .getTheme() 来获取当前主题,进行 if 语句来决定显示哪个 png。
例如在activity中,你可以通过调用getTheme()
来获取主题,因为this.getTheme() 是隐含的。
另一种可能性是切换到矢量,您可以在其中为不同的主题定义不同的颜色,当用户更改主题时它们会自动更改。这可能是更好、更具可扩展性的解决方案。您可以找到更多详细信息 here.
通常的方法是使用 night
资源限定符,因此如果您使用深色主题,它会从等效的 night
文件夹中提取命名资源(如果存在)。
我认为你有三个基本选项:
两个都叫
logo.png
,但是一个版本放在drawable
,另一个放在drawable-night
。这样,每当您引用@drawable/logo
时,它都会根据主题提取正确的版本。如果你有多个密度版本,在drawable-hdpi
等中,你将需要它们在drawable-night-hdpi
等中(限定符顺序很重要)如果您以通常的方式制作启动画面,即创建带有背景层的启动画面可绘制对象,并将徽标可绘制在另一层上,您可以只制作一个
night
这个的变体(在drawable-night
中)。每个版本都可以明确引用logo_day
或logo_night
,您可以将这些 PNG 保存在正常的drawable
文件夹中或者您可以制作一个
night
版本的初始主题,并将背景显式设置为初始可绘制对象的深色版本。您的启动画面都可以保留在正常的drawable
文件夹中
所以基本上,某些东西必须在符合 night
条件的资源文件夹中获得一个版本,这样它才能为暗模式提供替代资源。这取决于您要制作夜间版本的层次结构中的哪个资源(或者如果需要,您可以为所有资源制作夜间版本)。
另请记住,您的初始主题(如果您这样做的话)遵循系统的暗模式设置。如果您在应用程序中实现切换,并将其设置为深色模式,如果设备设置为浅色模式,则启动画面仍会显示为浅色变体。该主题是在您的应用程序启动之前设置的,并开始计算它应该处于暗模式还是亮模式