Определите, присутствует ли Материал, который вы находитесь в устройстве
Итак, мой босс попросил меня проанализировать, как реализовать цвета Material You, начиная с Android 12. Я исследовал это, и каждый блог на каждой странице о том, «как это сделать», говорит вам, что вам нужно удерживать дома экран, затем перейдите в «Обои и стиль» и измените обои. Однако есть проблема.
Я помню, что пока Android 12 находился в бета-версии, он поддерживал цвета Material You. Однако (я полагаю) после официального выпуска эта поддержка была удалена, потому что я не могу найти эту опцию. Вот как это выглядит, когда я удерживаю нажатой кнопку на главном экране:
На нем написано «Обои», и когда я нажимаю на него, он не открывает меню «Обои и стиль», а просто перенаправляется на « Живые обои» . Мне не удалось найти опцию цвета обоев в официальном выпуске Android 12. Однако он присутствует в готовящемся к выпуску эмуляторе API 32 (я полагаю, Android 13).
Немного изучив, я обнаружил, что система генерирует цвета обоев под системными ресурсами, такими как
system_accent1_600
и т.д., которые доступны начиная с API 31 (подробнее здесь). Это работает, когда я использую эмулятор API 32, который находится в бета-версии, но по умолчанию используется что-то еще (оттенок синего на цветах акцента и оттенки серого на нейтральных, также называемых цветах фона), что я не понял, откуда на официальном эмуляторе API 31.
Вот вопрос:
Поддерживаются ли цвета Material You официально , начиная с Android 12 (API 31)? Если да, то почему я не могу найти его в официальном эмуляторе Android?
Кроме того, можно ли определить, поддерживает ли устройство цвета Material You?
Спасибо за помощь.
2 ответа
Я думаю, это то, что вы ищете:
public static boolean isDynamicColorAvailable()
{
return VERSION.SDK_INT >= VERSION_CODES.S && DYNAMIC_COLOR_SUPPORTED_MANUFACTURERS.contains(Build.MANUFACTURER.toLowerCase());
}
Нашел это в классе DynamicColors в com.google.android.material.color
Вы можете просто назвать это так:
boolean isdca = DynamicColors.isDynamicColorAvailable();
Я надеюсь, что это отвечает на последнюю часть.
1. Поддерживаются ли цвета Material You официально, начиная с Android 12 (API 31)?
Да! Но это основано на том, как реализуется ПЗУ. Если вы используете Pixel, вы можете изменить цвет с помощью встроенного приложения для обоев. Но если вы используете AOSP, то в пользовательском интерфейсе нет официального способа изменить его.
Ознакомьтесь с этим документом: https://gist.github.com/zhaofengli/232f5a3d33113871ad61491629886084 .
2. Если да, то почему я не могу найти его на официальном эмуляторе Android?
Похоже, Google удалил его с зеркала. В предыдущем зеркале была эта функция.
3. Также можно ли определить, поддерживает ли устройство цвета Material You?
Поскольку Android 12 официально поддерживает Material You, вы можете просто проверить версию API. Но, по второму пункту, некоторые системы до сих пор его не поддерживают, так что можно воспользоваться методом
com.google.android.material.color.DynamicColors#isDynamicColorAvailable
. Это окончательный метод, используемый Material Design, в зависимости от версии SDK и производителя телефона.
4. Как правильно внедрить Material You?
- Способ XML: следуйте официальному документу: https://m3.material.io/libraries/mdc-android/color-theming .
- Программно так:
Проверьте код моего приложения :
val Context.colorOnPrimary: Int
get() {
return when {
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && isNight() -> {
ContextCompat.getColor(this, R.color.material_dynamic_primary20)
}
Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {
ContextCompat.getColor(this, R.color.material_dynamic_primary100)
}
isNight() || !supportNight() -> {
ContextCompat.getColor(this, R.color.md_theme_dark_onPrimary)
}
else -> {
ContextCompat.getColor(this, R.color.md_theme_light_onPrimary)
}
}
}