TextInput: Fixed autoscroll to cursor on Android

Summary:
This feature was disabled for multiline textinputs in D3528202 ... seems without a good reason.
The broken autoscroll-to-cursor feature is terribly harmful and counter-intuitive in ALL cases.
I also add a contentSize tracking in the example app to make sure that it is unaffected by this change.

https://pxl.cl/9RHP

https://github.com/facebook/react-native/issues/12799
https://github.com/facebook/react-native/issues/15778

Special thanks to konradkierus!

Reviewed By: sahrens

Differential Revision: D6405985

fbshipit-source-id: 337a390a9db7b3528200ef66c4a079b87608294e
This commit is contained in:
Valentin Shergin 2017-11-27 16:30:59 -08:00 committed by Facebook Github Bot
parent a7d46ea970
commit 0bef872f3f
2 changed files with 8 additions and 11 deletions

View File

@ -320,10 +320,14 @@ class AutogrowingTextInputExample extends React.Component<{}> {
width: 100,
multiline: true,
text: '',
contentSize: {
width: 0,
height: 0,
},
};
}
componentDidReceiveProps(props) {
componentWillReceiveProps(props) {
this.setState({
multiline: props.multiline,
});
@ -351,10 +355,12 @@ class AutogrowingTextInputExample extends React.Component<{}> {
multiline={this.state.multiline}
style={[style, {width: this.state.width + '%'}]}
onChangeText={(value) => this.setState({text: value})}
onContentSizeChange={(event) => this.setState({contentSize: event.nativeEvent.contentSize})}
{...props}
/>
<Text>Plain text value representation:</Text>
<Text>{this.state.text}</Text>
<Text>Content Size: {JSON.stringify(this.state.contentSize)}</Text>
</View>
);
}

View File

@ -117,16 +117,7 @@ public class ReactEditText extends EditText {
// TODO: t6408636 verify if we should schedule a layout after a View does a requestLayout()
@Override
public boolean isLayoutRequested() {
// If we are watching and updating container height based on content size
// then we don't want to scroll right away. This isn't perfect -- you might
// want to limit the height the text input can grow to. Possible solution
// is to add another prop that determines whether we should scroll to end
// of text.
if (mContentSizeWatcher != null) {
return isMultiline();
} else {
return false;
}
return false;
}
@Override