Неожиданное значение цвета из Resources.Theme.resolveAttribute - PullRequest
0 голосов
/ 28 апреля 2020
@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. Похоже, что более новое приложение интерпретирует значение как строку, а не цвет. Теперь я знаю, что происходит, но не знаю, почему и что с этим делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...