Android ContextWrapper覆盖ContextThemeWrapper?

Android ContextWrapper覆盖ContextThemeWrapper?,android,android-theme,android-context,material-components-android,crowdin,Android,Android Theme,Android Context,Material Components Android,Crowdin,我有一个与上下文相关的令人困惑的情况 我正在实现crowdin,这个sdk在运行时覆盖string.xml上下文 Crowdin.wrap(context) //ContextWrapper() 当不包装上下文时效果很好,但是当尝试使用materialalertialogbuilder将上下文包装为crowdin时,应用程序崩溃,出现下一个异常 android.view.InflateException: Binary XML file line #25 in com.example.app_

我有一个与上下文相关的令人困惑的情况

我正在实现crowdin,这个sdk在运行时覆盖
string.xml
上下文

Crowdin.wrap(context) //ContextWrapper()
当不包装上下文时效果很好,但是当尝试使用
materialalertialogbuilder
将上下文包装为crowdin时,应用程序崩溃,出现下一个异常

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.
未找到
布局\u宽度
属性的文件来自
材料组件

我认为这个错误可能是因为材料首先应用了
ContextThemeWrapper
,然后crowdin在上下文包装(ContextThemeWrapper)上应用了

  • Appcompat:1.2.0
  • 材料:1.1.0
职位

Crowdin中的问题:

更多的是猜测,因为提供的信息有限

我从您的代码中看到的唯一明显错误是您使用了什么方法包装上下文

此处引用Crowdin回购协议中的:

通过在BaseActivity类中添加override方法将Crowdin翻译注入到上下文中,从而注入Crowdin翻译。如果您已经迁移到AppCompat 1.2.0+版本。请使用此方法:

@NonNull
@凌驾
公共AppCompatDelegate getDelegate(){
返回新的BaseContextWrappingDelegate(super.getDelegate());
}
重点补充

您向我们展示的代码似乎是AppCompat 1.1使用的方法

此外,我在类层次结构中没有看到
BaseActivity
。因此,您需要确保每个
活动
都包含上述代码,或者创建一个包含该代码的
基本活动
,并确保所有其他
活动
扩展它


如果这些都不起作用,您需要提供有关覆盖上下文的位置的信息,并向我们展示其中的代码:

  • 应用程序
    活动
    类中的
    attachBaseContext
  • getDelegate

能否向我们展示包装上下文的方法来源(适用于crowdin和主题化)?从理论上讲,多次包装上下文应该没有问题。创建此组件的活动/片段的onCreate部分也可以是relevant@JensV这是crowdin包装,感谢您的回答,但与问题无关,关于包装应用程序compact 1.1>1.2的主题是不同的this@DavidHackro在您的问题中,您清楚地说明了Appcompat:1.2.0。。。不知道我在这里误解了什么