diff --git a/src/api-impl-jni/views/AndroidLayout.c b/src/api-impl-jni/views/AndroidLayout.c index ecaaccd3..2bc61a53 100644 --- a/src/api-impl-jni/views/AndroidLayout.c +++ b/src/api-impl-jni/views/AndroidLayout.c @@ -1,6 +1,7 @@ #include #include "../util.h" +#include "../defines.h" #include "AndroidLayout.h" static int make_measure_spec(int layout_size, int for_size) @@ -26,6 +27,11 @@ static void android_layout_measure(GtkLayoutManager *layout_manager, GtkWidget * int widthMeasureSpec = make_measure_spec(layout->width, orientation == GTK_ORIENTATION_VERTICAL ? for_size : -1); int heightMeasureSpec = make_measure_spec(layout->height, orientation == GTK_ORIENTATION_HORIZONTAL ? for_size : -1); + // if layout params say match_parent, but GTK doesnt specify the dimension, fallback to old specification if available + if (widthMeasureSpec == -1) + widthMeasureSpec = _GET_INT_FIELD(layout->view, "oldWidthMeasureSpec"); + if (heightMeasureSpec == -1) + heightMeasureSpec = _GET_INT_FIELD(layout->view, "oldHeightMeasureSpec"); if (widthMeasureSpec != -1 && heightMeasureSpec != -1) { (*env)->CallVoidMethod(env, layout->view, handle_cache.view.measure, widthMeasureSpec, heightMeasureSpec); if((*env)->ExceptionCheck(env)) diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index d43a6917..7903beb2 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -807,8 +807,8 @@ public class View extends Object { public static HashMap view_by_id = new HashMap(); - private int oldWidthMeasureSpec; - private int oldHeightMeasureSpec; + private int oldWidthMeasureSpec = -1; + private int oldHeightMeasureSpec = -1; private boolean layoutRequested = true; private int oldWidth; private int oldHeight; @@ -1237,6 +1237,9 @@ public class View extends Object { public void requestLayout() { layoutRequested = true; + if (parent != null && !parent.isLayoutRequested()) { + parent.requestLayout(); + } native_requestLayout(widget); }; @@ -1302,7 +1305,7 @@ public class View extends Object { public boolean isEnabled() {return true;} public boolean hasFocus() {return false;} - public boolean isLayoutRequested() {return true;} + public boolean isLayoutRequested() {return layoutRequested;} public int getBaseline() {return -1;} public boolean hasFocusable() {return false;} public boolean isFocused() {return false;}