TextInputLayout не показывает подсказку EditText перед тем, как пользователь сосредоточится на ней
Я использую недавно выпущенную библиотеку поддержки дизайна Android для отображения плавающей метки с помощью EditTexts. Но я столкнулся с проблемой, что подсказка на EditText не отображается при визуализации пользовательского интерфейса, но я вижу подсказку после того, как я сосредоточусь на EditTexts.
Мой макет выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:id="@+id/ScrollView01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin">
<android.support.design.widget.TextInputLayout
android:id="@+id/name_et_textinputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin">
<EditText
android:id="@+id/FeedBackerNameET"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/feedbackname"
android:inputType="textPersonName|textCapWords" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/email_textinputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/FeedBackerEmailET"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/feedbackemail"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
<Spinner
android:id="@+id/SpinnerFeedbackType"
android:layout_width="fill_parent"
android:layout_height="48dp"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:entries="@array/feedbacktypelist"
android:prompt="@string/feedbacktype" />
<android.support.design.widget.TextInputLayout
android:id="@+id/body_textinputlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/EditTextFeedbackBody"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/feedbackbody"
android:inputType="textMultiLine|textCapSentences"
android:lines="5" />
</android.support.design.widget.TextInputLayout>
<CheckBox
android:id="@+id/CheckBoxFeedBackResponse"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:text="@string/feedbackresponse" />
<Button
android:id="@+id/ButtonSendFeedback"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:text="@string/feedbackbutton" />
</LinearLayout>
</ScrollView>
</FrameLayout>
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@drawable/toolbar_shadow" />
</FrameLayout>
Я также попытался установить подсказку для TextInputLayout
с использованием метода setHint
, но не повезло.
mNameTextInputLayout = (TextInputLayout) v.findViewById(R.id.name_et_textinputlayout);
mNameTextInputLayout.setErrorEnabled(true);
mNameTextInputLayout.setHint(feedBackerNameET.getHint());
mEmailTextInputLayout = (TextInputLayout) v.findViewById(R.id.email_textinputlayout);
mEmailTextInputLayout.setErrorEnabled(true);
mEmailTextInputLayout.setHint(feedBackerEmail.getHint());
mBodyTextInputLayout = (TextInputLayout) v.findViewById(R.id.body_textinputlayout);
mBodyTextInputLayout.setErrorEnabled(true);
mBodyTextInputLayout.setHint(feedBackBody.getHint());
Ответы
Ответ 1
Update:
Это ошибка, исправленная в версии 22.2.1 библиотеки.
Исходный ответ:
Как уже упоминалось @shkschneider, это известная ошибка. Github user @ljubisa987 недавно опубликовал Gist для обхода:
https://gist.github.com/ljubisa987/e33cd5597da07172c55d
Как отмечается в комментариях, обходной путь работает только на Android Lollipop и старше. Он не работает на Android M Preview.
Ответ 2
Это известная ошибка в библиотеке Android Design. Он был принят и назначен.
Итак, это должно быть исправлено в следующей версии библиотеки Android Design.
Тем временем вы можете посмотреть отслеживание проблем для хакерских исправлений, которые могут быть отправлены там, но я пока не знаю.
И да, это влияет только на Lollipop и выше.
Ответ 3
Эта проблема исправлена в версии 22.2.1
Ответ 4
Это работает для меня в Design Library 23.1.1:
Установите цвет подсказки в xml-атрибутах TextInputLayout:
<android.support.design.widget.TextInputLayout
....
android:layout_margin="15dp"
android:textColorHint="@color/hintColor"
android:layout_width="match_parent"
...
Ответ 5
вы должны использовать android.support.v7.widget.AppCompatEditText
как EditText
и установить android:hint
, как показано ниже
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/etx_first_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:hint="@string/hint_first_name"/>
</android.support.design.widget.TextInputLayout>
Ответ 6
<android.support.design.widget.TextInputLayout
android:id="@+id/editText1"
android:layout_margin="15dp"
android:layout_centerVertical="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<AutoCompleteTextView
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:singleLine="true"
android:hint="Add City" />
</android.support.design.widget.TextInputLayout>
Используйте этот фрагмент кода. Убедитесь, что ваша активность - AppCompatActivity.
И зависимость также с последними версиями
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.android.support:design:22.2.0'
Обновите студию Android до последней версии.
см. вывод здесь
Ответ 7
Если вы настроите подсказку EditText программно, это не сработает!
Вам нужно установить подсказку в свойстве TextInputLayout.
TextInputLayout textInputLayout = (TextInputLayout) findViewById(R.id.usernameTextInputLayout);
textInputLayout.setHint(getString(R.string.username_hint));
Вот XML, если вам интересно:
<android.support.design.widget.TextInputLayout
android:id="@+id/usernameTextInputLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/usernameEt"
android:layout_width="match_parent"
android:layout_height="@dimen/default_height"
android:layout_marginEnd="@dimen/default_margin"
android:layout_marginStart="@dimen/default_margin"
android:maxLength="@integer/username"
tools:hint="Username" />
</android.support.design.widget.TextInputLayout>
Ответ 8
Я решил проблему с этим кодом:
new Handler().postDelayed(
new Runnable() {
@Override
public void run() {
TextInputLayout til = (TextInputLayout) someParentView.findViewById(R.id.til);
til.setHint("Your Hint Text");
til.bringToFront();
}
}, 10);
Ключ здесь bringToFront
. Это заставляет TextInputLayout
повторить его рисунок, что не то же самое, что делать invalidate()
. Если вы пытаетесь отобразить TextInputLayout
на view
с animations
или tranistions
, вам необходимо выполнить вышеуказанный код в конце animation
или transition
. Просто убедитесь, что приведенный выше код работает на интерфейсе пользователя thread
.
Ответ 9
Эта проблема разрешена в v23.0.1
библиотеки дизайна поддержки. Я также обновил мои appcompat-v7
до 23.0.1
, compileSdkVersion
до 23
и buildToolsVersion
до 23.0.1
в build.gradle.
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
}
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}
Ответ 10
Похоже, эта проблема возникает, когда вы устанавливаете onFousListener в EditText - пытаетесь расширить EditText и поддерживать несколько onFocusListeners
Ответ 11
Установите цвет подсказки, который контрастирует с фоном EditText.
<item name="android:textColorHint">#FF424242</item>
по теме:
setHintTextColor() в EditText
Изменить цвет подсказки EditText при использовании TextInputLayout
Как изменить цвет плавающей метки TextInputLayout
Ответ 12
Проблема решена:
Goto build.gradle приложения ur и проверьте библиотеку дизайна.
компилировать 'com.android.support:design:22.2.1'
Он должен быть 22.2.1 или новее.
Ответ 13
Я нашел что-то другое.
При настройке стиля для фрагмента
f1.setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_DeviceDefault_Light);
Ошибка исчезла, когда я пробовал разные стили, чем "Theme_DeviceDefault_Dialog".
Попробуйте.
Ответ 14
Проблема - это цвет подсказки. Он становится белым при вводе чего-то. Измените цвет подсказки или измените цвет фона. Вы увидите подсказку при наборе текста.