Drawable уже принадлежит другому владельцу, но не предоставляет постоянное состояние

Ошибка: в LayerDrawable добавлен неверный объект рисования! Drawable уже принадлежит другому владельцу, но не предоставляет постоянное состояние.

Я вдруг заметил эту ошибку сегодня, и я не уверен, что это было из-за того, что я только что обновил свое тестовое устройство до Android 8.0. В сообщении об ошибке четко указано, что что-то не так с настройкой волнового эффекта на кнопку с плавающим действием, и действительно, при нажатии кнопки волновой эффект отсутствует. Однако я не уверен, что вызывает эту проблему. На самом деле один и тот же баг вылетает два раза подряд. Любая помощь приветствуется! Остальная часть приложения по-прежнему работает нормально, но ошибка меня действительно беспокоит.

p.s. minSdkVersion — 22, targetSdkVersion иcompileSdkVersion — 27.

В MyActivity строка 117 — это привязка данных и настройка представления содержимого.

ActivityMyBinding binding = DataBindingUtil.setContentView(
            this, R.layout.activity_my);

Вот полная трассировка стека:

W/LayerDrawable: Invalid drawable added to LayerDrawable! Drawable already belongs to another owner but does not expose a constant state.
             java.lang.RuntimeException
                 at android.graphics.drawable.LayerDrawable$ChildDrawable.<init>(LayerDrawable.java:1855)
                 at android.graphics.drawable.LayerDrawable$LayerState.<init>(LayerDrawable.java:1975)
                 at android.graphics.drawable.LayerDrawable.createConstantState(LayerDrawable.java:168)
                 at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1779)
                 at android.graphics.drawable.LayerDrawable.mutate(LayerDrawable.java:1785)
                 at android.graphics.drawable.RippleDrawable.mutate(RippleDrawable.java:997)
                 at android.view.View.applyBackgroundTint(View.java:21809)
                 at android.view.View.setBackgroundDrawable(View.java:21680)
                 at android.support.design.widget.FloatingActionButton.access$001(FloatingActionButton.java:68)
                 at android.support.design.widget.FloatingActionButton$ShadowDelegateImpl.setBackgroundDrawable(FloatingActionButton.java:824)
                 at android.support.design.widget.FloatingActionButtonLollipop.setBackgroundDrawable(FloatingActionButtonLollipop.java:73)
                 at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:179)
                 at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:151)
                 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.inflate(LayoutInflater.java:515)
                 at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                 at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
                 at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                 at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                 at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:276)
                 at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:261)
                 at com.generica.genericb.genericc.MyActivity.onCreate(MyActivity.java:117)
                 at android.app.Activity.performCreate(Activity.java:7174)
                 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
                 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2908)
                 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3030)
                 at android.app.ActivityThread.-wrap11(Unknown Source:0)
                 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
                 at android.os.Handler.dispatchMessage(Handler.java:105)
                 at android.os.Looper.loop(Looper.java:164)
                 at android.app.ActivityThread.main(ActivityThread.java:6938)
                 at java.lang.reflect.Method.invoke(Native Method)
                 at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

person eckc    schedule 03.04.2018    source источник


Ответы (3)


Мне нужно было использовать app:backgroundTint вместо android:backgroundTint

person Nimitz14    schedule 16.07.2019

Изменение app:srcCompat="@android:drawable/..." на android:src="@android:drawable/..." исправило это для меня.

Странно ... тот, кто отправил ответ раньше, указал мне на решение, но они удалили свой ответ. знак равно

Они упомянули, что у Drawable есть состояние, и если вы назначите его более чем одной плавающей кнопке действия, тогда возникнет проблема с отслеживанием состояния Drawable. Судя по всему, с недавним обновлением эта проблема была исправлена. Это привело меня к пониманию, что я устанавливал источник FAB с app:srcCompat, а не android:src.

person eckc    schedule 11.04.2018

если у вас есть Fab в активности xml, сохраните приведенный ниже код и удалите android:backgroundTint="@color/colorPrimary" Это решило проблему.

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/list_fab_margin"
android:layout_marginTop="@dimen/list_fab_margin"
android:layout_marginEnd="@dimen/list_fab_margin"
android:layout_marginBottom="@dimen/list_fab_margin"
app:backgroundTint="@color/colorPrimary"
app:fabSize="mini"
app:srcCompat="@drawable/ic_edit"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:layout_editor_absoluteX="41dp"
tools:layout_editor_absoluteY="16dp" />
person Rik Banerjee    schedule 11.09.2019