Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
材料android芯片在xml布局中膨胀时崩溃_Android_Androidx_Material Components Android - Fatal编程技术网

材料android芯片在xml布局中膨胀时崩溃

材料android芯片在xml布局中膨胀时崩溃,android,androidx,material-components-android,Android,Androidx,Material Components Android,即使我不做任何代码。。。看起来在视图中的某个地方类drawable是以某种方式创建的,这会使芯片崩溃,因为这是不允许的。。。欢迎任何帮助 android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class com.google.android.material.chip.Chip Caused by: android.view.InflateExc

即使我不做任何代码。。。看起来在视图中的某个地方类drawable是以某种方式创建的,这会使芯片崩溃,因为这是不允许的。。。欢迎任何帮助

android.view.InflateException: Binary XML file line #22: Binary XML file line #22: Error inflating class com.google.android.material.chip.Chip
    Caused by: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.android.material.chip.Chip
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
        at android.view.LayoutInflater.createView(LayoutInflater.java:647)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
        at renetik.android.viewbase.CSView.inflate(CSView.java:104)
        at renetik.android.viewbase.CSView.getView(CSView.java:119)
        at renetik.android.viewbase.CSViewController.getView(CSViewController.java:405)
        at renetik.android.viewbase.CSViewController.getView(CSViewController.java:408)
        at renetik.android.viewbase.CSView.findView(CSView.java:108)
        at renetik.android.extensions.view.CSViewKt.editText(CSView.kt:22)
        at com.tanya.renetik.redriver.view.route.EditHouseFieldsController.<init>(EditHouseFieldsController.kt:15)
        at com.tanya.renetik.redriver.view.route.started.StartedAddHouseController.<init>(StartedAddHouseController.kt:31)
        at com.tanya.renetik.redriver.view.route.started.StartedRouteMapController$onCreate$2.invoke(StartedRouteMapController.kt:37)
        at com.tanya.renetik.redriver.view.route.started.StartedRouteMapController$onCreate$2.invoke(StartedRouteMapController.kt:17)
        at renetik.android.extensions.view.ViewKt$onClick$$inlined$apply$lambda$1.onClick(View.kt:51)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24697)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
     Caused by: java.lang.UnsupportedOperationException: Do not set the background; Chip manages its own background drawable.
        at com.google.android.material.chip.Chip.setBackground(Chip.java:397)
        at android.view.View.<init>(View.java:5200)
        at android.widget.TextView.<init>(TextView.java:824)
        at android.widget.Button.<init>(Button.java:172)
        at android.widget.CompoundButton.<init>(CompoundButton.java:94)
        at android.widget.CheckBox.<init>(CheckBox.java:69)
        at android.widget.CheckBox.<init>(CheckBox.java:65)
        at androidx.appcompat.widget.AppCompatCheckBox.<init>(AppCompatCheckBox.java:64)
        at com.google.android.material.chip.Chip.<init>(Chip.java:169)
android.view.InflateException:二进制XML文件行#22:二进制XML文件行#22:对类com.google.android.material.chip.chip进行充气时出错
原因:android.view.InflateException:二进制XML文件行#22:错误膨胀class com.google.android.material.chip.chip
原因:java.lang.reflect.InvocationTargetException
位于java.lang.reflect.Constructor.newInstance0(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:334)
位于android.view.LayoutInflater.createView(LayoutInflater.java:647)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
在android.view.LayoutInflater.充气(LayoutInflater.java:515)
在android.view.LayoutInflater.充气(LayoutInflater.java:423)
位于renetik.android.viewbase.CSView.inflate(CSView.java:104)
位于renetik.android.viewbase.CSView.getView(CSView.java:119)
位于renetik.android.viewbase.CSViewController.getView(CSViewController.java:405)
位于renetik.android.viewbase.CSViewController.getView(CSViewController.java:408)
位于renetik.android.viewbase.CSView.findView(CSView.java:108)
位于renetik.android.extensions.view.CSViewKt.editText(CSView.kt:22)
在com.tanya.renetik.redriver.view.route.EditHouseFieldsController上。(EditHouseFieldsController.kt:15)
在com.tanya.renetik.redriver.view.route.start.StartedAddHouseController.(StartedAddHouseController.kt:31)
在com.tanya.renetik.redriver.view.route.StartedRouteMapController$onCreate$2.invoke(StartedRouteMapController.kt:37)
在com.tanya.renetik.redriver.view.route.StartedRouteMapController$onCreate$2.invoke(StartedRouteMapController.kt:17)
在renetik.android.extensions.view.ViewKt$onClick$$inlined$apply$lambda$1.onClick(view.kt:51)
在android.view.view.performClick上(view.java:6256)
在android.view.view$PerformClick.run(view.java:24697)
位于android.os.Handler.handleCallback(Handler.java:789)
位于android.os.Handler.dispatchMessage(Handler.java:98)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6541)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:240)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
原因:java.lang.UnsupportedOperationException:不设置背景;芯片管理自己的背景可绘制。
位于com.google.android.material.chip.chip.setBackground(chip.java:397)
在android.view.view.(view.java:5200)
位于android.widget.TextView。(TextView.java:824)
在android.widget.Button.(Button.java:172)
位于android.widget.CompoundButton.(CompoundButton.java:94)
在android.widget.CheckBox.(CheckBox.java:69)
在android.widget.CheckBox.(CheckBox.java:65)
位于androidx.appcompat.widget.AppCompatCheckBox.(AppCompatCheckBox.java:64)
在com.google.android.material.chip.chip.(chip.java:169)
在布局中就像这样

  <com.google.android.material.chip.Chip
            android:id="@+id/EditHouse_Category_Vacant"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/Category_Vacant" />

我的主题文件很简单:

    <style name="DriverTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <item name="colorPrimary">@color/driver_primary</item>
        <item name="colorPrimaryDark">@color/driver_primary_dark</item>
        <item name="colorSecondary">@color/driver_secondary</item>
    </style>

</resources>


@颜色/驱动程序
@颜色/驱动程序\u主\u暗
@颜色/驱动程序
ext.kotlin_版本='1.3.0' ext.material_version='1.0.0' ext.appcompat_版本='1.0.0'
ext.play_version='16.0.0'

仅仅是我在一天的战斗后的一个小解决方案:/

class ChipCrashWorkaround(context: Context, attrs: AttributeSet?, defStyleAttr: Int)
    : Chip(context, attrs, defStyleAttr) {

    constructor (context: Context, attrs: AttributeSet?)
            : this(context, attrs, R.attr.chipStyle)

    constructor (context: Context) : this(context, null)

    override fun setBackground(background: Drawable) = try {
        super.setBackground(background)
    } catch (ex: UnsupportedOperationException) {
        warn(ex)
    }

    override fun setBackgroundDrawable(background: Drawable) = try {
        super.setBackgroundDrawable(background)
    } catch (ex: UnsupportedOperationException) {
        warn(ex)
    }
}

嗯,我可以清楚地看到,尽管我禁用了所有的自定义设置,但无论如何,drawable可能会从主题应用到我的芯片。。Wtf我不知道,但必须前进…

您正在使用哪个版本的库?抛出异常是因为芯片管理自己的背景,不支持View#setBackground。您的芯片实例的父实例是否可能正在尝试设置芯片的背景?

好的,我找到了,我正在使用此代码创建顶层布局:

view = FrameLayout(ContextThemeWrapper(this.context(), R.style.CSNavigationContainer))
在这个布局里面,我设置了白色背景,应该可以,但是。。。 现在我看到了ContextThemeWrapper的实际功能:

The specified theme will be applied on top of the base context's theme.
因此,我的上下文主题被修改为包含白色背景,这不知何故转到了其他视图,后来用这个上下文和这个崩溃的芯片创建,因为它不允许背景

所以我必须停止使用ContextThemeWrapper,也许我误解了真正的目的,我想通过编程将样式应用到我的视图中,实际上是什么工作,但它修改了整个主题

因此,我找到了用于编程应用样式的库,并将代码更改为:

  view = FrameLayout(context()).apply { style(R.style.CSNavigationContainer) }

现在它以同样的风格工作。

您使用什么主题来进行包含此
芯片的活动?这个主题定义了android:background吗?@BenP。我添加了我的主题文件,没有什么特别的…芯片在哪里?它在动作栏里吗?嗨,你是说通过编程?或者我该如何从家长那里设置背景呢?当然我知道是什么导致了崩溃。。。不知道背景颜色是如何应用的。。。这里有一些背景魔法…你能验证一下,在一个非常简单的示例应用程序中,崩溃是否可以重现,而不使用任何自定义视图吗?你看过我找到的解决方案了吗?这是怎么发生的,解释得很清楚,