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 содержащий код и убедитесь, что все остальные Activitys расширить его.


Если ничего из этого не работает, вам необходимо предоставить информацию о том, где вы переопределяете свои контексты, и показать нам код там:

  • в Application или же Activity классы в attachBaseContext
  • В любом AppCompatActivity классы в getDelegate
Другие вопросы по тегам