設計サポートライブラリ22.2.1でTextInputLayout
を使用しています。
EditText
の値をプログラムで設定しました。画面が表示されると、フローティング位置に移動する前に、TextInputLayout
のヒントが内部のテキストと重なっていることがわかります。
ここに簡単なレイアウトがあります:
<Android.support.design.widget.TextInputLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/editText1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="hint1" />
</Android.support.design.widget.TextInputLayout>
私のActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
EditText e1 = (EditText) findViewById(R.id.editText1);
e1.setText("TEXT TEST 1");
}
誰かが回避策を知っていますか?
現在、この動作を回避する唯一の方法は、プログラムでEditText
を追加することです。
TextInputLayout
EditText
なしで作成します。プログラム的に、またはXMLインフレーションを介して-問題ではありませんが、空である必要があります。EditText
を作成し、そのテキストを必要なものに設定します。EditTExt
をTextInputLayout
に追加します。次に例を示します。
TextInputLayout til = (TextInputLayout) findViewById(R.id.til);
til.setHint(R.string.hint);
EditText et = new EditText(getContext());
et.setText(value);
til.addView(et);
2015年8月21日更新、デザインライブラリV23:
デザインサポートライブラリv23を使用アニメーションを無効にできます:
setHintAnimationEnabled
メソッド を使用するだけです:
textInputLayout.setHintAnimationEnabled(boolean)
ここでの問題 Google Tracker 。
最近、DialogFragmentの使用中にこの問題が発生しました。解決するには、フィールドに値がある場合はヒントアニメーションを無効にするだけですbeforeフィールド値を設定します。順序は重要です。
例えば、
TextInputLayout layout = (TextInputLayout) findViewById(R.id.text_layout);
TextInputEditText edit = (TextInputEditText) findViewById(R.id.text_edit);
String fieldValue = "Something";
layout.setHintAnimationEnabled(fieldValue == null);
edit.setText(fieldValue);
このように、テキストが設定されているときにレイアウトがアニメーションを開始することはありません。また、テキストの変更を監視し、フィールドが空のときに再度有効にすることもできます。
XMLでTextInputLayout
を直接指定できます。
app:hintAnimationEnabled="false"