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