TextInput layout turns editext into red on setting error

你说的曾经没有我的故事 提交于 2019-12-10 16:59:38

问题


I have a layout, whenever i press submit button and set error on text input layout it turns the editText into red but i hadn't set any color on editText on set error. Basically i just wanted to give the error string below the editText and not to turn editText into red on setting the error. My Fragment code is as follows,

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;
    }
 }
}

My xml code for fragment is as follows with linear layout as parent,

<?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>

basically i just wanted to give the error string below the editext and not to turn editext into red on setting the error.

My ui after setting the error is,

My normal ui ,


回答1:


You have to setError() not to TextInputLayout but to EditText inside TextInputLayout.

XML : here I assigned id for EditText inside 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: here I find EditText by ID and assign setError() to it.

    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;
    }
  }


来源:https://stackoverflow.com/questions/37476005/textinput-layout-turns-editext-into-red-on-setting-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!