layouts code android android-layout dalvik

android - code - java.lang.IllegalArgumentException: Rect debe intersecar con los límites del niño



dalvik code android (6)

Después de actualizar la nueva versión de appcompat a 24.2.1 tuve el mismo error, intente bajar la versión a 24.1.1 o incluso a una versión estable 23.

En Android Studio, después de iniciar un nuevo proyecto y seleccionar una Actividad con pestañas, una vez que se construye el proyecto, aparece este error en el Monitor de 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)

¿Qué significa esta excepción y cómo solucionarlo? Es un proyecto completamente nuevo, por lo que no he realizado ningún cambio.


El error se ha corregido en 25.1.0


El problema está presente cuando se utiliza un diseño basado en una versión anterior de appcompat, busque el archivo XML de diseño y edítelo. Borrar herramientas: contexto atribut y el problema está resuelto.


En mi caso, el problema se debió a FloatingActionButton.Behavior.

Aquí el código dentro del diseño del coordinador.

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."); } }

Y aquí el código dentro de 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; }

Como puede ver, getInsetDodgeRect se estaba volviendo verdadero y, por alguna razón, rect no se estaba cruzando. Esto causa el problema.

La solución.

Podría corregirlo simplemente extendiendo el comportamiento y sobrescribiendo el método getInsetDodgeRect para devolver falso;

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; } ...



Recibí el mismo error, pero de alguna manera, la desinstalación de la aplicación y su ejecución nuevamente ayudaron a resolverlo.