web-dev-qa-db-ja.com

テキストがプログラムで設定されている場合、TextInputLayoutアニメーションはテキストとオーバーラップします

設計サポートライブラリ22.2.1TextInputLayoutを使用しています。

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");
   }

誰かが回避策を知っていますか?

enter image description here

16

現在、この動作を回避する唯一の方法は、プログラムでEditTextを追加することです。

  1. TextInputLayoutEditTextなしで作成します。プログラム的に、またはXMLインフレーションを介して-問題ではありませんが、空である必要があります。
  2. EditTextを作成し、そのテキストを必要なものに設定します。
  3. EditTExtTextInputLayoutに追加します。

次に例を示します。

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

17

最近、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);

このように、テキストが設定されているときにレイアウトがアニメーションを開始することはありません。また、テキストの変更を監視し、フィールドが空のときに再度有効にすることもできます。

4
smallstepstoday

XMLでTextInputLayoutを直接指定できます。

 app:hintAnimationEnabled="false"
2