毎回のように調べているので、いい加減に記事としてまとめます。
今回は、React Native の TextInput
のレイアウトについてです。
TextInput
に multiline
を設定し、かつスタイルで高さも指定すると、よくある自由入力欄が作れるのですが、Android の場合、カーソルやプレースホルダーがその入力欄の上下中央に表示されます。
機能的には問題ないのですが、デザイン的に入力欄の中央にカーソルやプレースホルダーが表示されているとちょっと見栄えが悪かったのでこちらを上揃えになるように修正していきます。
参考にさせていただいた記事はこちら。
React Nativeでmultilineの入力フィールドの入力開始位置を整える | ハックノート
https://hacknote.jp/archives/28149/
修正といっても、TextInput
のスタイルに textAlignVertical: 'top'
を追加するだけです!
サンプルコードはこちら。
import { TextInput, StyleSheet } from 'react-native'; const styles = StyleSheet.create({ input: { height: 100, textAlignVertical: 'top', borderWidth: 1, borderColor: 'gray', }, });
<TextInput style={styles.input} multiline onChangeText={text => this.onChangeText(text)} value={this.state.text} />
上記のように実装したところ、高さ 100 でグレーの枠線に囲まれた入力欄が表示され、カーソルやプレースホルダーの位置も上揃えの状態になっていました!
これでOKですね!
なお、同じことを iOS でやる場合には textAlignVertical: 'top'
は不要なのですが、逆に multiline
の TextInput
でカーソル及びプレースホルダーを入力欄の中央にしたい場合、まだ別の方法を使う必要があります。
というのも…iOS は、まさかの textAlignVertical: 'top'
に対応していないのです…!
ということで、iOS で TextInput
の中央にカーソル及びプレースホルダーを配置したい場合は、TextInput に alignSelf: 'center'
を追加してください。
これで、TextInput
の中央にカーソルやプレースホルダーが配置されるはずです!
以上、React Native で改行可能な TextInput の入力開始位置を上揃えにする方法についてでした。
ご参考になれば幸いです。