Подтвердить что ты не робот

Java.lang.IllegalArgumentException: Rect должен пересекаться с ограничениями для детей

В Android Studio после запуска нового проекта и выбора вкладок, после сборки проекта, я получаю эту ошибку в Android Monitor:

E/AndroidRuntime: FATAL EXCEPTION: main
 Process: com.example.app, PID: 23581
 java.lang.IllegalArgumentException: Rect should intersect with child bounds.
     at android.support.design.widget.CoordinatorLayout.offsetChildByInset(CoordinatorLayout.java:1319)
     at android.support.design.widget.CoordinatorLayout.onChildViewsChanged(CoordinatorLayout.java:1257)
     at android.support.design.widget.CoordinatorLayout$OnPreDrawListener.onPreDraw(CoordinatorLayout.java:1805)
     at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1867)
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600)
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
     at android.view.Choreographer.doFrame(Choreographer.java:544)
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
     at android.os.Handler.handleCallback(Handler.java:733)
     at android.os.Handler.dispatchMessage(Handler.java:95)
     at android.os.Looper.loop(Looper.java:136)
     at android.app.ActivityThread.main(ActivityThread.java:5001)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:515)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
     at dalvik.system.NativeStart.main(Native Method)

Что означает это исключение и как его исправить? Это совершенно новый проект, поэтому я не внес никаких изменений.

4b9b3361

Ответ 1

После обновления новой версии appomppat до 24.2.1 у меня была такая же ошибка, Попробуйте снизить версию до 24.1.1 или даже до стабильной версии 23.

Ответ 2

В моем случае проблема возникла из-за FloatingActionButton.Behavior.

Здесь код внутри координационного макета

  if (behavior != null && behavior.getInsetDodgeRect(this, child, rect)) {
        // Make sure that it intersects the views bounds
        if (!rect.intersect(child.getLeft(), child.getTop(),
                child.getRight(), child.getBottom())) {
            throw new IllegalArgumentException("Rect should intersect with child bounds.");
        }
    }

И вот код внутри FloatingActionButton.Behavior

    @Override
    public boolean getInsetDodgeRect(@NonNull CoordinatorLayout parent,
            @NonNull FloatingActionButton child, @NonNull Rect rect) {
        // Since we offset so that any internal shadow padding isn't shown, we need to make
        // sure that the shadow isn't used for any dodge inset calculations
        final Rect shadowPadding = child.mShadowPadding;
        rect.set(child.getLeft() + shadowPadding.left,
                child.getTop() + shadowPadding.top,
                child.getRight() - shadowPadding.right,
                child.getBottom() - shadowPadding.bottom);
        return true;
    }

Как вы видите, getInsetDodgeRect возвращал true, и по какой-то причине rect не пересекался. Это вызывает проблему.

Обходной путь.

Я мог бы исправить это, просто расширив поведение и перезаписав метод getInsetDodgeRect, чтобы вернуть false;

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
...
@Override
public boolean getInsetDodgeRect(@NonNull CoordinatorLayout parent, @NonNull FloatingActionButton child, @NonNull Rect rect) {
    super.getInsetDodgeRect(parent, child, rect);
    return false;
}
...

Ответ 3

Это ошибка, представленная в библиотеке поддержки 24.2.1, здесь.

Известные временные решения:

  • Переход на другую версию библиотеки поддержки

Ответ 4

Исправлена ​​ошибка в 25.1.0

Ответ 5

Проблема возникает при использовании макета на основе старой версии appcompat, просмотра XML файла макета и его редактирования. Инструменты стирания: контекстный атрибут и проблема решена.

Ответ 6

Я получал ту же ошибку, но некоторые, как удаление приложения и повторное его повторное использование помогли решить его