4

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, enter image description here

My normal ui , enter image description here

Reprator
  • 2,859
  • 2
  • 32
  • 55

1 Answers1

-2

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;
    }
  }
Farid
  • 2,317
  • 1
  • 20
  • 34
  • i don't want to use the set error method of editext. – Reprator May 27 '16 at 06:42
  • What is the reason? To me, setting error to EditText should't be problem to you. – Farid May 27 '16 at 06:45
  • As you commented if you want change only color of Text below EditText you should setError() to EditText. – Farid May 27 '16 at 06:47
  • It causes a problem, as you scroll the view the set error method doesn't hide on getting out of the view...i already had done a lot of work on this......so i don't want to waste any further time on editext set error. – Reprator May 27 '16 at 06:49