make sure multiline TextInput is scrollable within a ScrollView

Reviewed By: bestander

Differential Revision: D3668840

fbshipit-source-id: 349314588035935543944ea6a8ddcb730c3ee85e
This commit is contained in:
ShengMin Zhang 2016-08-04 17:44:39 -07:00 committed by Facebook Github Bot
parent 5405aeb2a3
commit b05c7f792f
1 changed files with 19 additions and 0 deletions

View File

@ -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