AndroidのTextInputLayoutの要素の位置を調整する
位置指定についてメモ。
左右の余白について
TextInputLayout
はその内部だけだと左側の位置が揃っているのですが、
他の要素で同じ値を指定した時と比べてみると、TextInputLayout
の要素の左右に4dpのPadding
があるみたいです。
これでは他の要素と一緒にフォームに入れたときに、TextInputLayout
だけ真ん中の方に引っ込んで余分な目の動きが発生することになります。
こう言う場合、全体を包んでいるLinearLayout
などのViewGroup
の持つ左右のpadding
を4dp減らして、他の要素の左右のmargin
を4dp増やせば揃います。
上下の余白について
デフォルトの指定より、もう少しエラーメッセージの余白を詰めたい/空けたいな、と思うことがあります。
そう言う場合は、TextInputLayout
の子要素のpaddingBottom
を使ったらできました。
<android.support.design.widget.TextInputLayout android:id="@+id/text_input_layout" android:background="#ccc" android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/userid" android:textSize="20sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="40dp" <!-- 下線とエラーの余白 --> android:hint="TextInputLayout"/> </android.support.design.widget.TextInputLayout>
android:layout_marginBottom="-10dp"
で詰めた場合
上下の高さについて
TextInputLayout
でlayout_height
を指定しないとエラーメッセージが出たとき/出ない時でこエラーメッセージ分この要素の高さが変わってフォーム全体の表示が崩れるのを避けるため、layout_height
に大きめの固定値を指定したことがあります。
このとき、TextInputLayout
のlayout_height
が思ったより小さいと、サポートライブラリのバグ*1とは無関係にエラーメッセージが表示されなくなることがあります。
一行目は大丈夫でも、長めの入力を受け取って、2行分EditTextのフォームに取ったら足りなくなったとかそういうこともあるので、そう言う場合は、TextInputLayout
の要素の下の要素の上の方の余白をすべてTextInputLayout
の余白に突っ込んだり、2行目は入力時以外表示しない設定にする、などどう対処するのか確認しておきましょう。