From c0bc875c11b708849780e7bb794437d1559345a0 Mon Sep 17 00:00:00 2001 From: Julian Winkler Date: Mon, 11 Mar 2024 18:23:38 +0100 Subject: [PATCH] ScrollView: implement custom onMeasure() --- .../widgets/android_widget_ScrollView.c | 1 + src/api-impl/android/view/View.java | 2 ++ src/api-impl/android/widget/ScrollView.java | 17 +++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/api-impl-jni/widgets/android_widget_ScrollView.c b/src/api-impl-jni/widgets/android_widget_ScrollView.c index 19dff634..6af15e9b 100644 --- a/src/api-impl-jni/widgets/android_widget_ScrollView.c +++ b/src/api-impl-jni/widgets/android_widget_ScrollView.c @@ -13,6 +13,7 @@ JNIEXPORT jlong JNICALL Java_android_widget_ScrollView_native_1constructor(JNIEn GtkWidget *scrolled_window = gtk_scrolled_window_new(); wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), scrolled_window); gtk_widget_set_name(scrolled_window, "ScrollView"); + (*env)->SetBooleanField(env, this, _FIELD_ID(_CLASS(this), "haveCustomMeasure", "Z"), true); return _INTPTR(scrolled_window); } diff --git a/src/api-impl/android/view/View.java b/src/api-impl/android/view/View.java index 18e4bb99..d348bcfc 100644 --- a/src/api-impl/android/view/View.java +++ b/src/api-impl/android/view/View.java @@ -1632,4 +1632,6 @@ public class View extends Object { public boolean getGlobalVisibleRect(Rect visibleRect) { return native_getGlobalVisibleRect(widget, visibleRect); } + + public boolean onCheckIsTextEditor() {return false;} } diff --git a/src/api-impl/android/widget/ScrollView.java b/src/api-impl/android/widget/ScrollView.java index 16566002..e6193c3f 100644 --- a/src/api-impl/android/widget/ScrollView.java +++ b/src/api-impl/android/widget/ScrollView.java @@ -2,6 +2,7 @@ package android.widget; import android.content.Context; import android.util.AttributeSet; +import android.view.View; import android.view.ViewGroup; public class ScrollView extends ViewGroup { @@ -20,5 +21,21 @@ public class ScrollView extends ViewGroup { @Override protected native void native_removeView(long widget, long child); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = 0; + int height = 0; + if (getChildCount() > 0) { + View child = getChildAt(0); + LayoutParams lp = child.getLayoutParams(); + int childWidthMeasureSpec = getChildMeasureSpec(widthMeasureSpec, 0, lp.width); + int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); + width = child.getMeasuredWidth(); + height = child.getMeasuredHeight(); + } + setMeasuredDimension(resolveSize(width, widthMeasureSpec), resolveSize(height, heightMeasureSpec)); + } + public void setFillViewport(boolean fillViewport) {} }