7

I have a text input layout and I want to use that to show an error message if the data entered in an edit text inside it is incorrect. The definitions are as follows:

<android.support.design.widget.TextInputLayout
            android:id="@+id/number_input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/TextLabelWhite" >

            <EditText
                android:id="@+id/number_edit_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:digits="01234 56789"
                android:hint="Number"
                android:inputType="number"
                android:textColor="@color/white" />
</android.support.design.widget.TextInputLayout>

The style is defined as follows:

<style name="TextLabelWhite" parent="TextAppearance.AppCompat">
    <item name="android:textColorHint">@color/white</item>
    <item name="colorAccent">@color/white</item>
    <item name="colorControlNormal">@color/white</item>
    <item name="colorControlActivated">@color/white</item>
</style>

Now if the data entered is not correct I do the following operations:

TextInputLayout numberInputLayout = (TextInputLayout) view.findViewById(R.id.number_input_layout);
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
numberEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
numberInputLayout.setErrorEnabled(true);
numberEditText.setError("Tis an error dear");
Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();

When all of this is done I get the error:

Can't convert to color: type=0x2 on the line numberInputLayout.setErrorEnabled(true);

Where am I going wrong?

EDIT 1: As soon as I remove the TextLabelWhite theme, it starts working. But the theme is necessary.

praxmon
  • 5,009
  • 22
  • 74
  • 121

3 Answers3

16

Change

android:theme="@style/TextLabelWhite"

to

style="@style/TextLabelWhite"

in android.support.design.widget.TextInputLayout attributes in your xml, and you will not got an error.

UPDATE: To customize colors you can try this. Add

<item name="colorControlNormal">@android:color/white</item>
<item name="colorControlActivated">@android:color/white</item>

directly to your app theme style. It'll affect on all EditText, but if it's not a problem for your app it may helps.

UPDATE 2:

The best solution i've found. Use

android:theme="@style/TextLabelWhite"

just like in your xml. Change TextLabelWhite style parent to your AppTheme style, like:

<style name="TextLabelWhite" parent="AppTheme">

But android:textColorHint will not work on TextInputLayout (have no such attribute). You should use design:hintTextAppearance, but place it in different style and apply directly to TextInputLayout via

design:hintTextAppearance="@style/CustomTextAppearance"
j2esu
  • 1,647
  • 1
  • 16
  • 26
  • Tried, the theme is not applied and the style tag doesn't really work, in short I end up with the default `edittext` colors. – praxmon Jan 18 '16 at 12:12
2

At first call view instead of getView()

Don't

EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);

Do

EditText numberEditText = (EditText) view.findViewById(R.id.number_edit_text);
IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198
0

Just Try This Once and do lemme know: without TextInputLayout

EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);

String strNumber  = shipText.getText().toString();
 if(TextUtils.isEmpty(strNumber  )) {
                    numberEditText .setError("Please enter a value");

                 }

Or Do : with TextInputLayout

TextInputLayout numberInputLayout = (TextInputLayout) view.findViewById(R.id.number_input_layout);
EditText numberEditText = (EditText) getView().findViewById(R.id.number_edit_text);
**numberInputLayout.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);**
numberInputLayout.setErrorEnabled(true);
***numberInputLayout.setError("Tis an error dear");***
Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show();
Namrata
  • 1,683
  • 1
  • 17
  • 28