Хранить TextInputLayout всегда сфокусированным или держать ярлык всегда расширенным

Мне было интересно, можно ли всегда расширять ярлык независимо от того, есть ли текст в EditText. Я огляделся вокруг источника и использовал ValueAnimator и counter внутри TextWatcher для анимации или без изменений. Может быть, я могу установить пользовательский TextWatcher с пользовательским ValueAnimator на EditText внутри TextInputLayout?

Ответ 1

Текущая версия TextInputLayout существует специально для того, чтобы сделать одно - показать/скрыть вспомогательную метку в зависимости от того, есть ли какой-либо текст в EditText или нет. Вам нужно другое поведение, поэтому вам нужен другой виджет, чем TextInputLayout. Этот случай является идеальным кандидатом на создание пользовательского представления, которое будет соответствовать вашим потребностям.

Тем не менее, ваша идея установки пользовательского TextWatcher в EditText не будет работать либо потому, что TextInputLayout не обнаруживает ничего из внутренних элементов, которые фактически обрабатывают анимацию - ни updateLabelVisibility(), setEditText(), волшебство Handler, которое выполняет работу или что-то еще. Конечно, мы, конечно, не хотим идти по пути отражения для такой детали, поэтому...

Просто используйте MaterialEditText! Он имеет следующее свойство, которое делает именно то, что вы хотите.

met_floatingLabelAlwaysShown. Всегда показывайте плавающую метку, а не анимируйте ее в/из. False по умолчанию.

Библиотека довольно стабильна (я использую ее в двух разных проектах) и имеет множество возможностей для настройки. Надеюсь, поможет!

Ответ 2

Для меня с поддержкой 23.3.0 он работает, чтобы использовать

              <android.support.design.widget.TextInputLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:hint="wow such hint"
              app:hintEnabled="true"
              app:hintAnimationEnabled="false"
              />

Ответ 3

Используйте TextInputEditText вместо EditText. Пример:

<android.support.design.widget.TextInputLayout
        android:id="@+id/TextInputLayoutID"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:hint="Hint text" >

        <android.support.design.widget.TextInputEditText
            android:id="@+id/TextInputEditTextID"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            />
    </android.support.design.widget.TextInputLayout>