@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TypedValue color = new TypedValue();
getTheme().resolveAttribute(android.R.attr.textColorSecondary, color, true);
Toast.makeText(this, String.format("%x", color.data), Toast.LENGTH_LONG).show();
}
Этот код должен составлять тост, показывающий вторичный цвет текста. Если я добавлю его в одно из моих старых приложений, оно отобразит ffaaaaaa
, как и ожидалось. Если я создаю новое приложение, тот же код показывает a07
. Это явно неправильно; если я пытаюсь использовать его как цвет, я получаю невидимые представления, потому что первый байт (альфа) равен 0. Что здесь происходит?
Оба приложения используют:
compileSdkVersion 29
buildToolsVersion '29.0.2'
minSdkVersion 21
targetSdkVersion 29
РЕДАКТИРОВАТЬ:
Я попытался запустить новое приложение на другом телефоне, и оно показывает aaa
. Это интересно, потому что цвет #aaa
эквивалентен #ffaaaaaa
. TypedValue имеет поле type
, и в новом приложении (значение = 0xaaa) это TYPE_STRING, но в старом приложении (значение = 0xffaaaaaa) это TYPE_INT_COLOR_RGB4. Похоже, что более новое приложение интерпретирует значение как строку, а не цвет. Теперь я знаю, что происходит, но не знаю, почему и что с этим делать.