Как отключить анимацию плавающей метки при заполнении полей EditText, обернутых в TextInputLayout

Я хотел бы иметь возможность иметь плавающую метку уже на месте, когда я предварительно заполняю поле EditText. Когда представление загружается, подсказка по-прежнему отображается за текстом, прежде чем он будет анимирован в виде плавающей метки. Кажется, для этого нет метода в TextInputLayout библиотеки поддержки. Какие-нибудь мысли?




Ответы (3)


С библиотекой дизайна поддержки v23 вы можете использовать:

til.setHintAnimationEnabled(false);

Здесь вы можете найти javadoc .

person Gabriele Mariotti    schedule 20.08.2015
comment
Одно замечание: анимацию нужно отключить, прежде чем мы установим текст/подсказку. Неправильная последовательность не отключит анимацию. - person Elye; 01.08.2016
comment
Работающий. Убедитесь, что вы вызываете метод на своем TextInputEditText, а не на TextINputLayout. Анимация воспроизводится после того, как вы установите поля, а затем снова включите анимацию. :-(( - person Sevastyan Savanyuk; 09.11.2017
comment
@Sevastyan Вам действительно не нужна анимация, пока поле не будет очищено. Добавьте прослушиватель изменения текста и снова включите анимацию, когда количество символов в поле достигнет 0. - person Rene Juuse; 10.11.2017

Основываясь на ответе Габриэля, я написал небольшой метод для запуска после загрузки иерархии представлений, который отключает анимацию при первоначальном отображении, но включает ее после. Добавьте это в свою базовую активность/фрагмент/представление, и это решит проблему.

private void setTextInputLayoutAnimation(View view) {
        if (view instanceof TextInputLayout) {
            TextInputLayout til = (TextInputLayout) view;
            til.setHintAnimationEnabled(false);
            til.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                @Override public boolean onPreDraw() {
                    til.getViewTreeObserver().removeOnPreDrawListener(this);
                    til.setHintAnimationEnabled(true);
                    return false;
                }
            });
            return;
        }

        if (view instanceof ViewGroup) {
            ViewGroup group = (ViewGroup) view;
            for (int i = 0; i < group.getChildCount(); i++) {
                View child = group.getChildAt(i);
                setTextInputLayoutAnimation(child);
            }
        }
    }
person EE66    schedule 01.03.2018

Я получил решение, используя приведенный ниже код, я пытался использовать xml, но больше не работал, вы можете попробовать программно установить подсказку как для TextInputLayout, так и для TextInputEditText

    TextInputLayout hintView = (TextInputLayout) findViewById(R.id.activity_login_inputlayout_password);
    hintView.setHintAnimationEnabled(false);
    hintView.setHint("");
    yourEditTextPassword.setHint(getString(R.string.text_password_hint));
person varotariya vajsi    schedule 16.06.2018