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;
}
...
Es un error introducido en la biblioteca de soporte 24.2.1
, code.google.com/p/android/issues/detail?id=222597 .
Soluciones conocidas:
- Bajar de categoría a una versión diferente de la biblioteca de soporte
Recibí el mismo error, pero de alguna manera, la desinstalación de la aplicación y su ejecución nuevamente ayudaron a resolverlo.