diff --git a/Libraries/Components/TextInput/TextInput.js b/Libraries/Components/TextInput/TextInput.js index 88e6a16bb..1670f3745 100644 --- a/Libraries/Components/TextInput/TextInput.js +++ b/Libraries/Components/TextInput/TextInput.js @@ -739,6 +739,7 @@ const TextInput = React.createClass({ children={children} disableFullscreenUI={this.props.disableFullscreenUI} textBreakStrategy={this.props.textBreakStrategy} + onScroll={this._onScroll} />; return ( diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK index ae5cd06cd..b14cc057f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/BUCK @@ -14,6 +14,7 @@ android_library( react_native_target('java/com/facebook/react/uimanager:uimanager'), react_native_target('java/com/facebook/react/uimanager/annotations:annotations'), react_native_target('java/com/facebook/react/views/imagehelper:imagehelper'), + react_native_target('java/com/facebook/react/views/scroll:scroll'), react_native_target('java/com/facebook/react/views/text:text'), react_native_target('java/com/facebook/react/views/view:view'), ], 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 9e9fc6edc..1665bba19 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 @@ -80,6 +80,7 @@ public class ReactEditText extends EditText { private @Nullable String mReturnKeyType; private @Nullable SelectionWatcher mSelectionWatcher; private @Nullable ContentSizeWatcher mContentSizeWatcher; + private @Nullable ScrollWatcher mScrollWatcher; private final InternalKeyListener mKeyListener; private boolean mDetectScrollMovement = false; @@ -106,6 +107,7 @@ public class ReactEditText extends EditText { mTextWatcherDelegator = null; mStagedInputType = getInputType(); mKeyListener = new InternalKeyListener(); + mScrollWatcher = null; } // After the text changes inside an EditText, TextView checks if a layout() has been requested. @@ -171,6 +173,15 @@ public class ReactEditText extends EditText { return super.onKeyUp(keyCode, event); } + @Override + protected void onScrollChanged(int horiz, int vert, int oldHoriz, int oldVert) { + super.onScrollChanged(horiz, vert, oldHoriz, oldVert); + + if (mScrollWatcher != null) { + mScrollWatcher.onScrollChanged(horiz, vert, oldHoriz, oldVert); + } + } + @Override public void clearFocus() { setFocusableInTouchMode(false); @@ -220,6 +231,10 @@ public class ReactEditText extends EditText { mContentSizeWatcher = contentSizeWatcher; } + public void setScrollWatcher(ScrollWatcher scrollWatcher) { + mScrollWatcher = scrollWatcher; + } + @Override public void setSelection(int start, int end) { // Skip setting the selection if the text wasn't set because of an out of date value. diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index d7dc063d3..b0ed4cf83 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -48,6 +48,8 @@ import com.facebook.react.uimanager.annotations.ReactProp; import com.facebook.react.uimanager.annotations.ReactPropGroup; import com.facebook.react.uimanager.events.EventDispatcher; import com.facebook.react.views.imagehelper.ResourceDrawableIdHelper; +import com.facebook.react.views.scroll.ScrollEvent; +import com.facebook.react.views.scroll.ScrollEventType; import com.facebook.react.views.text.DefaultStyleValuesUtil; import com.facebook.react.views.text.ReactFontManager; import com.facebook.react.views.text.ReactTextUpdate; @@ -278,6 +280,15 @@ public class ReactTextInputManager extends BaseViewManager