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());
16 ответов:
обновление:
Это ошибка, которая была исправлена в версии 22.2.1 библиотеки.
Оригинальный Ответ:
Как уже упоминалось @shkschneider, это известная ошибка. Пользователь Github @ljubisa987 недавно опубликовал суть решения проблемы:
https://gist.github.com/ljubisa987/e33cd5597da07172c55d
Как отмечено в комментариях, обходной путь работает только на Android Леденец и старше. Он не работает на Android M Preview.
Что это известная ошибка из библиотеки дизайна Android. Это было принят и назначен.
таким образом, вы должны иметь это исправлено в следующем выпуске библиотеки дизайна Android.
в то же время вы можете посмотреть трекер проблем для hacky-fix, который может быть размещен там, но я не знаю ни одного на данный момент.
и да, это влияет только на Lollipop и выше.
это работает для меня в библиотеке проектирования 23.1.1:
установите цвет подсказки в атрибутах xml TextInputLayout:
<android.support.design.widget.TextInputLayout .... android:layout_margin="15dp" android:textColorHint="@color/hintColor" android:layout_width="match_parent" ...
вы должны использовать
android.support.v7.widget.AppCompatEditText
какEditText
и setandroid: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>
<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 studio до последней версии. посмотреть вывода здесь
Если вы устанавливаете подсказку 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>
этот вопрос решается в
v23.0.1
библиотеки дизайна поддержки. Я также обновил мойappcompat-v7
до23.0.1
,compileSdkVersion
до23
&buildToolsVersion
до23.0.1
на построить.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' }
я решил свою проблему с этим кодом:
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
. Просто убедитесь, что приведенный выше код работает на UIthread
.
похоже, эта проблема возникает при установке onFousListener на EditText-попробуйте расширить EditText и поддерживать несколько onFocusListeners
установите цвет подсказки, который контрастирует с фоном EditText.
<item name="android:textColorHint">#FF424242</item>
по теме:
setHintTextColor () в EditText
изменить цвет подсказки EditText при использовании TextInputLayout
как изменить цвет плавающей метки TextInputLayout
проблема решена: Гото билд.gradle из приложения ur и проверьте библиотеку дизайна. компиляции в COM.андроид.поддержка:дизайн:22.2.1' Он должен быть 22.2.1 или новее.
Я нашел что-то другое.
при установке стиля для фрагмента,
f1.setStyle (DialogFragment.STYLE_NO_FRAME, android.Р. стиль.Theme_DeviceDefault_Light);
ошибка исчезла, когда я попробовал разные стили, чем "Theme_DeviceDefault_Dialog".
дайте ему попробовать.
проблема в цвете подсказки. Он становится белым при вводе чего-то. Пожалуйста, измените цвет подсказки или измените цвет фона. Вы увидите подсказку во время набора текста.
есть простое решение для этого, как это работало для меня
<android.support.design.widget.TextInputLayout android:id="@+id/activity_login_til_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="27dp" android:layout_marginTop="24dp" android:padding="10dp" app:passwordToggleEnabled="true" app:passwordToggleTint="#000000" app:passwordToggleDrawable="@drawable/passwordviewtoggleselector" android:theme="@style/Base.TextAppearance.AppCompat"> <!---- add this line and theme as you need -----> <android.support.design.widget.TextInputEditText android:id="@+id/activity_login_et_password" android:layout_width="match_parent" android:layout_height="58dp" android:hint="Password" android:inputType="textPassword" android:padding="10dp" android:textColor="#f5ab3a" android:textColorHint="#e6d2d1cf" android:textSize="20dp" /> </android.support.design.widget.TextInputLayout>
просто добавить android: theme= " @style / Base.TextAppearance.Совместимости приложений" к TextEditLayout и он должен работать, и вы можете изменить тему, как вам нужно.