java.lang.IllegalArgumentException:Rect应该与孩子的边界相交

在开始一个新项目并select一个Tabbed Activity后,在Android Studio中,在项目生成之后,我在Android监视器中看到这个错误:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 23581 java.lang.IllegalArgumentException: Rect should intersect with child's 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) 

这个例外是什么意思,以及如何解决? 这是一个全新的项目,所以我没有做任何改变。

Solutions Collecting From Web of "java.lang.IllegalArgumentException:Rect应该与孩子的边界相交"

将新的appcompat版本更新为24.2.1后,我有同样的错误,试着将版本降低到24.1.1,甚至是稳定的23版本。

在我的情况下,问题是由于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's 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; } ... 

这是支持库24.2.1引入的一个错误, 请看这里 。

已知的解决方法:

  • 降级到不同的支持库版本

该错误已在25.1.0中修复

当使用基于旧版本appcompat的布局时,问题就出现了,请查看布局xml文件并对其进行编辑。 擦除工具:上下文和问题解决。

我得到了同样的错误,但一些如何卸载应用程序,再次运行它帮助解决它