From b05c7f792f1337790c32e9b3a0822796a2359e05 Mon Sep 17 00:00:00 2001 From: ShengMin Zhang Date: Thu, 4 Aug 2016 17:44:39 -0700 Subject: [PATCH] make sure multiline TextInput is scrollable within a ScrollView Reviewed By: bestander Differential Revision: D3668840 fbshipit-source-id: 349314588035935543944ea6a8ddcb730c3ee85e --- .../react/views/textinput/ReactEditText.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java index d5f9c604229..30ac0b05276 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java @@ -29,6 +29,7 @@ import android.text.style.BackgroundColorSpan; import android.text.style.ForegroundColorSpan; import android.view.Gravity; import android.view.KeyEvent; +import android.view.MotionEvent; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; @@ -95,6 +96,24 @@ public class ReactEditText extends EditText { mKeyListener = new InternalKeyListener(); } + /** + * Make sure multiline text input can be scrolled within a ScrollView + */ + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + // Disallow ScrollView to intercept touch events. + this.getParent().requestDisallowInterceptTouchEvent(true); + break; + case MotionEvent.ACTION_UP: + // Allow ScrollView to intercept touch events. + this.getParent().requestDisallowInterceptTouchEvent(false); + break; + } + return super.dispatchTouchEvent(ev); + } + // After the text changes inside an EditText, TextView checks if a layout() has been requested. // If it has, it will not scroll the text to the end of the new text inserted, but wait for the // next layout() to be called. However, we do not perform a layout() after a requestLayout(), so