Как AppCompat раздувает макеты, которые явно не используют виджеты AppCompat? - PullRequest
0 голосов
/ 07 февраля 2019

При использовании AppCompat мне пришло в голову, что я использовал такие вещи, как Button вместо android.support.v7.widget.AppCompatButton в моих XML-файлах макета.Я сделал тест через view.getClass().getSimpleName() и подтвердил, что, хотя я объявил его как Button в XML, загружаемый класс был на самом деле AppCompatButton.

Как это работает, подкапот

1 Ответ

0 голосов
/ 07 февраля 2019

В процессе изучения этой темы, чтобы правильно задать вопрос, я сам нашел ответ.

При использовании AppCompatActivity происходят некоторые интересные вещи:

  1. LayoutInflater.Factory применяется к значению по умолчанию LayoutInflater через setFactory.Классы AppDelegateImpl в AppCompat реализуют интерфейс Factory, и один из них выбирается как делегат фабрики в зависимости от уровня API.Существует также немного другой Factory2, предназначенный для более поздних API.
  2. Когда ваши представления раздуваются из XML, имя класса представления передается в метод Factory createView, которыйпредоставляется возможность переопределить фактическое созданное представление.
  3. Имя представления сверяется с жестко закодированной хеш-таблицей строк в AppCompatViewInflater, и, если совпадение найдено, представление завышается.делегатом вместо стандартного инфлатера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...