Макет TextInput превращает редактируемый текст в красный цвет при ошибке настройки

У меня есть макет, всякий раз, когда я нажимаю кнопку отправки и устанавливаю ошибку в макете ввода текста, он превращает editText в красный, но я не устанавливал цвет в editText при ошибке установки. По сути, я просто хотел указать строку ошибки ниже editText, а не превращать editText в красный цвет при установке ошибки. Мой код фрагмента выглядит следующим образом:

public class SignIn extends Fragment implements View.OnClickListener
{
TextInputLayout edEamil,edPassword;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    // LogUtil.e(TAG,"onCreateView");
    return inflater.inflate(R.layout.fragment_signin,container,false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    // LogUtil.e(TAG,"onViewCreated");
    Button btSignin= GeneralFunction.findViewByIdAndCast(view, R.id.fs_bt_submit);
    btSignin.setOnClickListener(this);
    btSignin.setText(GeneralFunction.covertFistChat_everyWordUpper(getString(R.string.first_signin)));

    TextView tvForgetPassword= GeneralFunction.findViewByIdAndCast(view, R.id.fs_tv_fPassword);
    tvForgetPassword.setOnClickListener(this);

    TextView tvSignUP= GeneralFunction.findViewByIdAndCast(view, R.id.fs_tv_fSignup);
    tvSignUP.setOnClickListener(this);
    tvSignUP.setText(GeneralFunction.covertFistChat_everyWordUpper(getString(R.string.first_signUP)));

    edEamil=GeneralFunction.findViewByIdAndCast(view,R.id.fs_ti_email);
    DrawableState.editextSelector(edEamil);

    edPassword=GeneralFunction.findViewByIdAndCast(view,R.id.fs_ti_password);
    DrawableState.editextSelector(edPassword);
}

@Override
public void onClick(View v) {
    switch (v.getId())
    {
        case R.id.fs_bt_submit:
        {
            edEamil.setError("Not a valid email address!");
            edPassword.setError("Not a valid password!");
        }break;
    }
 }
}

Мой xml-код для фрагмента выглядит следующим образом с линейным макетом в качестве родителя:

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.TextInputLayout
    android:id="@+id/fs_ti_email"
    style="@style/textInputLayout">

    <EditText
        style="@style/edittext"
        android:tag="@string/str_email"
        android:hint="@string/str_email"/>
</android.support.design.widget.TextInputLayout>

<android.support.v4.widget.Space
    android:layout_width="match_parent"
    android:layout_height="@dimen/dim_edMarginTop"/>

<android.support.design.widget.TextInputLayout
    android:id="@+id/fs_ti_password"
    style="@style/textInputLayout">

    <EditText
        style="@style/edittext"
        android:imeOptions="actionDone"
        android:inputType="textPassword"
        android:tag="@string/str_password"
        android:hint="@string/str_password"/>
</android.support.design.widget.TextInputLayout>

<android.support.v4.widget.Space
    android:layout_width="match_parent"
    android:layout_height="@dimen/dim_edMarginButtonView"/>

<android.support.v7.widget.AppCompatButton style="@style/button"
    android:id="@+id/fs_bt_submit"
    android:text="@string/first_signin"/>

<android.support.v4.widget.Space
    android:layout_width="match_parent"
    android:layout_height="@dimen/dim_edPaddingLeftRigh"/>

<RelativeLayout android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView style="@style/textView"
        android:id="@+id/fs_tv_fPassword"
        android:text="@string/str_forgetPassword"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"/>
    <TextView style="@style/textView"
        android:id="@+id/fs_tv_fSignup"
        android:text="@string/first_signUP"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"/>
</RelativeLayout>

and the style for editext and input layout is as follows,

 <style name="textInputLayout">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:paddingBottom">@dimen/dim_textLaoutMargin</item>
    <item name="android:layout_marginBottom">@dimen/dim_textLaoutMargin</item>
</style>

<style name="edittext" parent="android:Widget.EditText">
    <item name="android:singleLine">true</item>
    <item name="android:textSize">@dimen/dim_widgetMarginLeft</item>
    <item name="android:textColor">@color/colorWhite</item>
    <item name="android:paddingLeft">@dimen/dim_edPaddingLeftRigh</item>
    <item name="android:paddingRight">@dimen/dim_edPaddingLeftRigh</item>
    <item name="android:paddingTop">@dimen/dim_edPaddingTop</item>
    <item name="android:paddingBottom">@dimen/dim_edPaddingBottom</item>
    <item name="android:gravity">start</item>
    <item name="android:background">@android:color/transparent</item>
    <item name="android:textColorHint">@color/colorWhite</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">@dimen/dim_buttonHeight</item>
    <item name="android:inputType">text|textCapSentences|textNoSuggestions</item>
    <item name="android:privateImeOptions">nm</item>
    <item name="android:imeOptions">actionNext</item>

    <item name="colorControlNormal">@color/colorWhite</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="android:textColorPrimary">@color/colorPrimary</item>
</style>

в основном я просто хотел указать строку ошибки под редактируемым текстом и не превращать редактируемый текст в красный цвет при установке ошибки.

Мой пользовательский интерфейс после установки ошибки: введите здесь описание изображения

Мой обычный интерфейс, введите здесь описание изображения


comment
удалить фон из стиля EditText   -  person Vivek Kumar Srivastava    schedule 07.06.2017
comment
stackoverflow.com/questions/33709066 /   -  person Keyur    schedule 31.01.2018
comment
Удалите android:background=@drawable/input_border из EditText. Это решит вашу проблему. Если вы хотите иметь фон для EditText, добавьте свойство фона в TextInputLayout.   -  person Yesha    schedule 14.05.2018


Ответы (1)


Вы должны установить Error() не в TextInputLayout, а в EditText внутри TextInputLayout.

XML: здесь я назначил идентификатор для EditText внутри TextInputLayout;

<android.support.design.widget.TextInputLayout
    style="@style/textInputLayout"
    android:id="@+id/fs_ti_email">

    <EditText

        android:id="@+id/edit_text_email" <!-- here your id-->
        style="@style/edittext"
        android:tag="@string/str_email"
        android:hint="@string/str_email"/>
</android.support.design.widget.TextInputLayout>

Java: здесь я нахожу EditText по ID и присваиваю ему setError().

    EditText email;

        //your code here...
        ...
  @Override
  public void onClick(View v) {
    switch (v.getId())
    {
        case R.id.fs_bt_submit:
        {
            email.setError("Not a valid email address!");
        }break;
    }
  }
person Farid    schedule 27.05.2016
comment
я не хочу использовать метод set error для edittext. - person Reprator; 27.05.2016
comment
Какова причина? Для меня установка ошибки в EditText не должна быть для вас проблемой. - person Farid; 27.05.2016
comment
Как вы прокомментировали, если вы хотите изменить только цвет текста ниже EditText, вы должны установить Error() в EditText. - person Farid; 27.05.2016
comment
Это вызывает проблему, когда вы прокручиваете представление, метод set error не скрывает при выходе из представления... я уже проделал большую работу над этим......, поэтому я не хочу тратить дальнейшее время на ошибку набора edittext. - person Reprator; 27.05.2016