ContextWrapper переопределить ContextThemeWrapper?
У меня запутанная ситуация связана с контекстом.
Я реализовал Crowdin, этот SDK делает "обертку" контекста для переопределения
string.xml
во время выполнения.
Crowdin.wrap(context) //ContextWrapper()
и отлично работает, если не обертывать контекст, но при попытке использовать
MaterialAlertDialogBuilder
с контекстом, обернутым для толпы, в приложении произошел сбой со следующим исключением.
android.view.InflateException: Binary XML file line #25 in com.example.app_user.user:layout/mtrl_alert_dialog: Binary XML file line #27: You must supply a layout_width attribute.
Caused by: java.lang.UnsupportedOperationException: Binary XML file line #27: You must supply a layout_width attribute.
Файл, в котором не найден
layout_width
атрибут от
Material Components
.
Я думаю, что эта ошибка может быть причиной того, что материал сначала применяет
ContextThemeWrapper
и после толпы примените обернутый контекст (ContextThemeWrapper)
- Appcompat: 1.2.0
- Материал: 1.1.0
После
1 ответ
Скорее предположение, поскольку предоставленная ограниченная информация
Единственная очевидная ошибка, которую я вижу в вашем коде, - это то, какой метод вы используете для обертывания Context.
Ссылка на инструкции из репозитория Crowdin здесь:
Внедрить переводы Crowdin, добавив метод переопределения в класс BaseActivity, чтобы внедрить переводы Crowdin в контекст. Если вы уже перешли на версию AppCompat 1.2.0+. Пожалуйста, используйте этот метод:
@NonNull @Override public AppCompatDelegate getDelegate() { return new BaseContextWrappingDelegate(super.getDelegate()); }
акцент добавлен
Код, который вы нам показываете, похоже, является методом, используемым для AppCompat 1.1.
Кроме того, я не вижу
BaseActivity
в вашей иерархии классов. Так что вам либо нужно убедиться, что каждый
Activity
содержит приведенный выше код, или вы создаете
BaseActivity
содержащий код и убедитесь, что все остальные
Activity
s расширить его.
Если ничего из этого не работает, вам необходимо предоставить информацию о том, где вы переопределяете свои контексты, и показать нам код там:
- в
Application
или жеActivity
классы вattachBaseContext
- В любом
AppCompatActivity
классы вgetDelegate